使用spring在运行时注入BasicDataSource

时间:2016-04-24 15:09:45

标签: java spring dependency-injection datasource jdbctemplate

我使用spring访问数据库:

  • XML Spring上下文:

    <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">...</bean> <bean id="jdbcTmp" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="ds" /> </bean> <bean id="myDao" class="MyDao"> <property name="jdbcTemplate" ref="jdbcTmp" /> </bean>

  • 代码:

    System.out.println("There is : " + new ClassPathXmlApplicationContext("beans.xml").getBean("myDao").countRowsInTheDB() + " rows in this source";

它很简单,效果很好。但我想根据变量在运行时在不同的数据库之间进行选择。

类似的东西:

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); int rows1 = ctx.getBean("myDao", "dataSource1").countRowsInTheDB(); int rows2 = ctx.getBean("myDao", "dataSource2").countRowsInTheDB();

最简单的方法是什么?

我想为每个来源创建一个XML配置:

 <bean id="myDao1" class="MyDao"><property name="data" ref="jdbcTmpForDataSource1" /></bean>
 <bean id="myDao2" class="MyDao"><property name="data" ref="jdbcTmpForDataSource2" /></bean>

编写代码:

 int i = getDataSourceIndex();
 ctx.getBean("myDao" + i).countRowsInTheDB();

1 个答案:

答案 0 :(得分:1)

创建第二个数据源,jdbc模板,dao:

<bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource">...   </bean>
<bean id="jdbcTmp2"   class="org.springframework.jdbc.core.JdbcTemplate">
 <property name="dataSource" ref="ds2" />
</bean>
<bean id="myDao2" class="MyDao">
 <property name="jdbcTemplate" ref="jdbcTmp2" />

创建一个bean,即所有数据源的列表

只需将其自动装入,spring就会注入列表

@Autowired List<DataSource> dataSources;

在你的代码中迭代列表,并根据你的需要做任何数据源。