1

我使用 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 以使用 dataSource ?

谢谢

4

2 回答 2

2

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

于 2013-06-14T05:37:31.400 回答
1

由于您的熊都是相同的类型(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 中。

于 2013-06-14T05:46:45.160 回答