如何在Spring中基于应用程序模式动态配置DataSource?

时间:2014-06-07 18:36:34

标签: spring datasource

我们有一个应用程序既可以作为独立的Spring应用程序运行,也可以作为Weblogic中的Webservice运行。独立应用程序通过读取属性文件来创建数据库DataSource,如下所示。

但是对于Webservices部分,我想通过JNDI使用Weblogic中配置的DataSource。我不确定如何根据我的应用程序运行的模式进行动态DataSource切换。请帮忙吗?

@Configuration
@PropertySources(value = {@PropertySource("classpath:app.properties")})
public class DAOConfig {
    @Autowired
    Environment env;

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        return new DataSources.Builder()
                .host(env.getProperty("dbhost"))
                .port(env.getProperty("dbport", Integer.class))
                .service(env.getProperty("dbservice"))
                .user(env.getProperty("dbuser"))
                .pwd(env.getProperty("dbpwd"))
                .initialConnectionsInPool(env.getProperty("dbinitialConnectionsInPool", Integer.class))
                .maxConnectionsInPool(env.getProperty("dbmaxConnectionsInPool", Integer.class))
                .build();
    }
}

1 个答案:

答案 0 :(得分:2)

使用spring profiles,以下示例使用xml config:

    <beans profile="production">
        <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
            <constructor-arg ref="hikariConfig"/>
        </bean>
    </beans>

    <beans profile="development">
        <jdbc:embedded-database id="dataSource" type="H2">
            <jdbc:script location="classpath:/sql/createSchema.sql"/>
        </jdbc:embedded-database>
    </beans>

然后在启动应用程序时添加为参数:

-Dspring.profiles.active="development""