构建Maven项目,不包括Spring bean配置文件

时间:2013-06-14 04:18:01

标签: spring maven profile spring-bean

我使用Spring bean配置文件来分隔每个数据源环境:

<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文件时遇到了没有定义dataSource的错误。 似乎Maven没有使用Spring配置文件来构建jar。

如何配置Maven或Spring peofile以使用dataSource?

THX

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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中。