美文网首页
关于Spring配置多数据源Spring JDBC加载问题

关于Spring配置多数据源Spring JDBC加载问题

作者: Hey_Shaw | 来源:发表于2017-03-02 19:14 被阅读641次

背景:

原本已经完成的工程,需要重新从另一个数据库不间隔式的抽取一部分数据,到原本工程配置的数据库中,没有好的办法,只想到利用多数据源的方式抽取。

问题:

不能改动原工程的代码,原工程配置的使用Spring JDBC作为数据库连接,工程中有@Autowired和@Resource注解注入bean。

解决:

// 原工程数据源
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    //...省略空间等配置
        
        <property name="filters" value="stat" /> 
</bean>
    
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
        <constructor-arg index="0" ref="dataSource" />
</bean>
    
 // 配置数据源
 <bean id="dataSource4bwp" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${jdbc.url4bwp}"/>
        <property name="username" value="${jdbc.username4bwp}"/>
        <property name="password" value="${jdbc.password4bwp}"/>
        //...省略空间等配置
</bean>
<bean id="jdbcTemplate4bwp" class="org.springframework.jdbc.core.JdbcTemplate"  autowire-candidate="false">
        <constructor-arg index="0" ref="dataSource4bwp" />
</bean>

如果没有添加autowire-candidate="false" 属性,Spring IoC容器在加载bean并注入时会不知道实例化哪个bean(因为有jdbcTemplate和dataSource4bwp两个);添加autowire-candidate="false" 属性,容器则不会把这个bean作为候选bean,当需要使用时用
@Resource(name="jdbcTemplate4bwp")指定即可(使用@Autowired或加@Qualifier("jdbcTemplate4bwp")指定均不可以)。注意:这里的name是<bean>标签中的id属性。

相关文章

网友评论

      本文标题:关于Spring配置多数据源Spring JDBC加载问题

      本文链接:https://www.haomeiwen.com/subject/wbykgttx.html