spring多个数据源配置

Posted Henu丶雨巷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring多个数据源配置相关的知识,希望对你有一定的参考价值。

sys.properties中的内容
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
DB.url=jdbc\:oracle\:thin\:@****\:1521\:****
DB.username=****
DB.password=****


jdbc.driverClassName2=oracle.jdbc.driver.OracleDriver
DB.url2=jdbc\:oracle\:thin\:@****\:1521\:****
DB.username2=****
DB.password2=****

Spring配置文件中添加的内容

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!--数据库配置文件-->
<value>WEB-INF/sys.properties</value>

</list>
</property>
</bean>
<!-- 配置数据源1  -->
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${DB.url}"/>
<property name="username" value="${DB.username}"/>
<property name="password" value="${DB.password}"/>      
        <!--initialSize: 初始化连接-->  
<property name="initialSize" value="5"/>  
<!--maxIdle: 最大空闲连接-->  
<property name="maxIdle" value="3"/>  
<!--minIdle: 最小空闲连接-->  
<property name="minIdle" value="2"/>  
<!--maxActive: 最大连接数量-->  
<property name="maxActive" value="10"/>  
<!--removeAbandoned: 是否自动回收超时连接-->  
<property name="removeAbandoned" value="true"/>  
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
<property name="removeAbandonedTimeout" value="180"/>  
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->  
<property name="maxWait" value="3000"/>  
<property name="poolPreparedStatements" value="false"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="validationQuery" value="select * from dual"/>
</bean>   
<!-- 配置数据源2  -->
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName2}"/>
<property name="url" value="${DB.url2}"/>
<property name="username" value="${DB.username2}"/>
<property name="password" value="${DB.password2}"/>      
        <!--initialSize: 初始化连接-->  
<property name="initialSize" value="5"/>  
<!--maxIdle: 最大空闲连接-->  
<property name="maxIdle" value="3"/>  
<!--minIdle: 最小空闲连接-->  
<property name="minIdle" value="2"/>  
<!--maxActive: 最大连接数量-->  
<property name="maxActive" value="10"/>  
<!--removeAbandoned: 是否自动回收超时连接-->  
<property name="removeAbandoned" value="true"/>  
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
<property name="removeAbandonedTimeout" value="180"/>  
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->  
<property name="maxWait" value="3000"/>  
<property name="poolPreparedStatements" value="false"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="validationQuery" value="select * from dual"/>
</bean>  


  <!-- 事务1 -->  
    <bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource1" />  
    </bean>  
    <!-- 事务2 -->  
    <bean id="transactionManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource2" />  
    </bean>  
      
    <!-- 事务拦截1 -->  
    <bean id="transactionInterceptor1" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
        <property name="transactionManager" ref="transactionManager1" />  
        <property name="transactionAttributes">  
        <props>  
            <prop key="insert*">PROPAGATION_REQUIRED</prop>  
            <prop key="delete*">PROPAGATION_REQUIRED</prop>  
            <prop key="update*">PROPAGATION_REQUIRED</prop>  
            <prop key="do*">PROPAGATION_REQUIRED</prop>  
        </props>  
        </property>  
    </bean>  
    <!-- 事务拦截2 -->  
    <bean id="transactionInterceptor2" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
        <property name="transactionManager" ref="transactionManager2" />  
        <property name="transactionAttributes">  
        <props>  
            <prop key="insert*">PROPAGATION_REQUIRED</prop>  
            <prop key="delete*">PROPAGATION_REQUIRED</prop>  
            <prop key="update*">PROPAGATION_REQUIRED</prop>  
            <prop key="do*">PROPAGATION_REQUIRED</prop>  
        </props>  
        </property>  
    </bean>  
      
    <!--  管理你连接的地方-->  
    <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
        <property name="beanNames">  
        <value>*Service</value>  
        </property>  
        <property name="interceptorNames">  
            <list>  
            <value>transactionInterceptor1</value>  
            <value>transactionInterceptor2</value>  
            </list>  
        </property>  
    </bean>  
      
    <!-- ibatis的工厂数据源配置1 -->  
    <bean id="sqlMapClient1" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
        <property name="configLocation" value="WEB-INF/config/sql-map-config.xml" /><!--这里是ibatis的sqlMap文件集合 -->  
        <property name="dataSource" ref="dataSource1" />  
    </bean>  
      
    <!-- ibatis的工厂数据源配置2 -->  
    <bean id="sqlMapClient2" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
        <property name="configLocation" value="WEB-INF/config/sql-map-config.xml" /><!--这里是ibatis的sqlMap文件集合 -->  
        <property name="dataSource" ref="dataSource2" />  
    </bean>  
      
      
  
      
    <!-- ibatis抽象的Dao1 -->  
    <bean id="baseIbatisDAO1" abstract="true">  
        <property name="sqlMapClient">  
            <ref local="sqlMapClient1" />  
        </property>  
    </bean>  
      
    <!-- ibatis抽象的Dao2 -->  
    <bean id="baseIbatisDAO2" abstract="true">  
        <property name="sqlMapClient">  
            <ref local="sqlMapClient2" />  
        </property>  
    </bean>  


<!--将数据源注入到dao层-->
<bean id="deptDAO" class="com.cqjk.datasv.dept.DeptDAO" parent="baseIbatisDAO1">
  <property name="sqlmapNamespace">
    <value>dept</value>
  </property>
</bean>
<bean id="userDAO" class="com.cqjk.datasv.user.UserDAO" parent="baseIbatisDAO1">
  <property name="sqlmapNamespace">
    <value>user</value>
  </property>
</bean>
<bean id="eventsDAO" class="com.cqjk.datasv.events.EventsDAO" parent="baseIbatisDAO2">
  <property name="sqlmapNamespace">
    <value>events</value>
  </property>
</bean>
<bean id="ddwcDAO" class="com.cqjk.datasv.ddwc.DdwcDAO" parent="baseIbatisDAO2">
  <property name="sqlmapNamespace">
    <value>ddwc</value>
  </property>
</bean>
<bean id="ddwcRyDAO" class="com.cqjk.datasv.ddwcry.DdwcRyDAO" parent="baseIbatisDAO2">
  <property name="sqlmapNamespace">
    <value>ddwcry</value>
  </property>
</bean>
 

 

以上是关于spring多个数据源配置的主要内容,如果未能解决你的问题,请参考以下文章

从单个按钮从多个片段中提取数据

Spring事物三千问Spring配置多数据源 vs 给多个数据源添加事物管理

spring框架中多数据源创建加载并且实现动态切换的配置实例代码

Spring MVC配置多个数据源可能遇到的坑

多数据源 spring怎么管理事务的

Spring配置多个数据源