java - 如何从数据源列表实例化数据源?

标签 java spring spring-mvc

我是 Spring 新手。

我有多个数据库,但在任何给定时间都会打开一个数据库,具体取决于哪个数据库用户选择。所以我有一个 bean 定义如下。所以我的问题是,如果我使用下面给定的 bean,如何实例化数据源用户选择并在我的类中使用它。任何想法将不胜感激。

  <bean id="dataSources" class="java.util.TreeMap">
    <constructor-arg>
      <map>
        <entry key="dp1www" value-ref="dataSourceDp1www" />
        <entry key="dp2www" value-ref="dataSourceDp2www" />
        <entry key="sp0www" value-ref="dataSourceSp0www" />
        <entry key="sp1www" value-ref="dataSourceSp1www" />
        <entry key="sp2www" value-ref="dataSourceSp2www" />
      </map>
    </constructor-arg>
  </bean>

  <bean id="dataSourceDp1www" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="url" value="jdbc:oracle:thin:@sf1-hab-ppb-ww.home.com:1525/dp1www1.home.com" />
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="username" value="select" />
    <property name="password" value="######" />
  </bean>
  <bean id="dataSourceDp2www" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="url" value="jdbc:oracle:thin:@sf1-hbl-ppb-ww.home.com:1525/dp2www1.home.com" />
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="username" value="select" />
    <property name="password" value="######" />
  </bean>
  <bean id="dataSourceSp0www" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="url" value="jdbc:oracle:thin:@sf1-hbl-ppb-ww.home.com:1525/sp0www1.home.com" />
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="username" value="select" />
    <property name="password" value="######" />
  </bean>
  <bean id="dataSourceSp1www" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="url" value="jdbc:oracle:thin:@sf1-hab-ppb-ww.home.com:1525/sp1www1.home.com" />
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="username" value="select" />
    <property name="password" value="######" />
  </bean>

最佳答案

您可以只使用@Autowired注释来注入(inject)TreeMap实例:

@Autowired
private TreeMap<String, DataSource> dataSources;
....
DataSource dataSource = dataSources.get("dp1www");

或者您可以直接注入(inject)特定数据源,甚至无需创建TreeMap

@Autowired
private DataSource dataSourceDp1www;

关于java - 如何从数据源列表实例化数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813284/

相关文章:

spring - 在构建项目时,有没有办法摆脱这些 spring/aspectj 警告?

java - 在构建 SpringMVC 上保护上传的文件

java - Spring MVC中如何从 Controller 访问bean?

java - 当进度条达到最大值时,如何重置进度条并为其赋予新值?

java - 如何从单例 spring bean 内部访问 ServletRequest?

java - 在 Hybris 中,如何将一个扩展中的类导入到另一个扩展中

spring-mvc - Spring junit 测试用例中的此位置不允许使用注释 @Mock

java - 动态镜像类并添加构造函数

java - Intellij 2019.3.1 - 禁用 Java 中的包装

java - @ReplaceWithMock 与 @Qualifier