使用 spring 在运行时注入 BasicDataSource
Inject BasicDataSource at runtime with spring
我使用 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();
创建第二个数据源,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;
在您的代码中遍历列表并随心所欲地处理数据源。
我使用 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();
创建第二个数据源,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;
在您的代码中遍历列表并随心所欲地处理数据源。