spring配置双数据源

   spring动态配置多个数据源,程序在运行时根据请求和系统状态决定操作哪个数据库,这样可以提高系统的水平伸缩性。
  
   配置多个数据源的步骤如下:
   1.配置多个数据源
      <!-- MYSQL数据源 -->
   <beans:bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <beans:property name="driverClass">
     <beans:value>${dataSource.driverClassNameMS}</beans:value>
    </beans:property>
    <beans:property name="jdbcUrl">
     <beans:value>${dataSource.urlMS}</beans:value>
    </beans:property>
    <beans:property name="user">
     <beans:value>${dataSource.usernameMS}</beans:value>
    </beans:property>
    <beans:property name="password">
     <beans:value>${dataSource.passwordMS}</beans:value>
    </beans:property>
   </beans:bean>
 
   <!-- sqlserver 数据源 -->
   <beans:bean id="dataSourceSqlserver" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <beans:property name="driverClass">
     <beans:value>${dataSource.driverClassNameSS}</beans:value>
    </beans:property>
    <beans:property name="jdbcUrl">
     <beans:value>${dataSource.driverClassNameSS}</beans:value>
    </beans:property>
    <beans:property name="user">
     <beans:value>${dataSource.usernameSS}</beans:value>
    </beans:property>
    <beans:property name="password">
     <beans:value>${dataSource.passwordSS}</beans:value>
    </beans:property>
   </beans:bean>
 2.配置多个sessionFactory
      <!-- mysql session工厂 -->
    <beans:bean id="sessionFactoryMysql"
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
     <beans:property name="dataSource" ref="dataSource" />
     <beans:property name="hibernateProperties">
      <beans:props>
       <beans:prop key="hibernate.dialect">
        ${dataSource.dialect}
       </beans:prop>
       <beans:prop key="hibernate.show_sql">
        false
       </beans:prop>
      </beans:props>
     </beans:property>
     <beans:property name="packagesToScan">
      <beans:list>
       <!-- 扫描实体类,model -->
       <beans:value>实体类包名</beans:value>
      </beans:list>
     </beans:property>
    </beans:bean>
    
    <!-- SQLServer session工厂 -->
    <beans:bean id="sessionFactorySqlServer"
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
     <beans:property name="dataSource" ref="dataSourceSqlserver" />
     <beans:property name="hibernateProperties">
      <beans:props>
          <beans:prop key="hibernate.dialect">
        ${dataSource.dialect}
       </beans:prop>
       <beans:prop key="hibernate.show_sql">
        true
       </beans:prop>
      </beans:props>
     </beans:property>
     <beans:property name="packagesToScan">
      <beans:list>
       <!-- 扫描实体类,model -->
       <beans:value>实体类包名</beans:value>
      </beans:list>
     </beans:property>
    </beans:bean>
 3.配置多个事务
     <!-- mysql事务 -->
   <beans:bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactoryMysql" />
   </beans:bean>
   
   <!-- SQLServer事务 -->
   <beans:bean id="transactionManagerSS" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactorySqlServer" />
   </beans:bean>
 4.配置多个事务拦截器
     <beans:bean id="transactionInterceptorMysql"
    class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <beans:property name="transactionManager" ref="transactionManager" />
    <beans:property name="transactionAttributes">
     <beans:props>
      <beans:prop key="get*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="find*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="query*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="load*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="export*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="save*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="insert*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="update*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="del*">PROPAGATION_REQUIRED</beans:prop>
     </beans:props>
    </beans:property>
   </beans:bean>
   
   <beans:bean id="transactionInterceptorSqlServer"
    class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <beans:property name="transactionManager" ref="transactionManagerSS" />
    <beans:property name="transactionAttributes">
     <beans:props>
      <beans:prop key="get*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="find*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="query*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="load*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="export*">PROPAGATION_REQUIRED,readOnly</beans:prop>
      <beans:prop key="save*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="insert*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="update*">PROPAGATION_REQUIRED</beans:prop>
      <beans:prop key="del*">PROPAGATION_REQUIRED</beans:prop>
     </beans:props>
    </beans:property>
   </beans:bean>
 5.配置多个事务拦截器
    <beans:bean
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <beans:property name="beanNames">
     <beans:list>
      <beans:value>事务加载的类</beans:value>
     </beans:list>
    </beans:property>
    <beans:property name="interceptorNames">
     <beans:list>
      <beans:value>transactionInterceptorMysql</beans:value>
     </beans:list>
    </beans:property>
   </beans:bean>
   
   <beans:bean
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <beans:property name="beanNames">
     <beans:list>
       <beans:value>事务加载的类</beans:value>
     </beans:list>
    </beans:property>
    <beans:property name="interceptorNames">
     <beans:list>
      <beans:value>transactionInterceptorSqlServer</beans:value>
     </beans:list>
    </beans:property>
   </beans:bean>
备注:
    在applicationContext-basicData.xml配置dao类的时候注入的sessionfactory不同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值