gpt4 book ai didi

java - 使用 spring 在运行时注入(inject) BasicDataSource

转载 作者:行者123 更新时间:2023-12-01 10:00:51 24 4
gpt4 key购买 nike

我使用 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,它是所有数据源的列表

只需 Autowiring 它,spring 就会注入(inject)列表

@Autowired List<DataSource> dataSources;

在您的代码中迭代列表并使用数据源执行您想要的任何操作。

关于java - 使用 spring 在运行时注入(inject) BasicDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36824912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com