【问题标题】:Build Maven project without include Spring bean profile构建不包含 Spring bean 配置文件的 Maven 项目
【发布时间】:2013-06-14 04:18:00
【问题描述】:

我使用 Spring bean profile 来分离每个数据源环境:

<bean id="fooJDBCTemplate" class="com.rakuya.r_erp.task.dao.FooJDBCTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

<beans profile="dev">
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://somewhere:3306/erp?characterEncoding=UTF-8" />
        <property name="username" value="" />
        <property name="password" value="" />
    </bean>
</beans>

<beans profile="qa">
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://somewhere:3306/erp?characterEncoding=UTF-8"/>
        <property name="username" value=""/>
        <property name="password" value=""/>
    </bean>
</beans>

<beans profile="prod">
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://somewhere:3306/erp?characterEncoding=UTF-8"/>
        <property name="username" value=""/>
        <property name="password" value=""/>
    </bean>
</beans>

我使用以下命令构建 jar 文件并指定配置文件

mvn clean package -Dspring.profiles.active=prod

但是在执行 jar 文件时我得到了关于没有定义数据源的错误。 看来 Maven 不使用 Spring 配置文件来构建 jar。

如何配置 Maven 或 Spring peofile 以使用数据源?

谢谢

【问题讨论】:

    标签: spring maven profile spring-bean


    【解决方案1】:

    您需要在运行应用程序时传递配置文件 -D 开关。

    【讨论】:

      【解决方案2】:

      由于您的熊都是相同的类型(DriverManagerDataSource)并且环境之间唯一不同的是一些属性,我认为最好摆脱弹簧配置文件并使用属性来设置这些值。 PropertyPlaceholderConfigurer 应该能够处理这种情况,您可以设置一个 vm 参数来指定您想要的环境。类似于 -Denv=dev 的东西。

      <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
          <property name="locations">
              <list>
                  <value>classpath:${env}.properties</value>
              </list>
          </property>
      </bean>
      

      那么您只需要一个如下所示的数据源 bean:

      <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          <property name="driverClassName" value="${db.driver}" />
          <property name="url" value="${db.url}" />
          <property name="username" value="${db.username}" />
          <property name="password" value="${db.password}" />
      </bean>
      

      每个环境都有一个名为 dev.properties、qa.properties 和 prod.properties 的属性文件,其中包含 db.driver、db.url 等的值。

      当 spring 启动时,它将根据 -Denv 传入的值选择适当的属性文件,并将相应的属性值加载到您的数据源 bean 中。

      【讨论】:

      • 所以我执行命令后:mvn package -Denv=dev,Maven会将指定的属性替换成Spring Context,对吧?或者我在执行jar文件时需要指定-Denv=dev?
      • 您可以在运行时指定 -Denv=dev。所有属性文件都将捆绑到您的 Jar 中,因此您可以在任何环境中运行同一个 jar。当你执行 jar 并且 Spring 容器启动时,它将根据 -Denv 选择属性文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2018-07-23
      相关资源
      最近更新 更多