分享

spring,mybatis,atomikos多数据源的整合

 instl 2015-06-10
          由于在接下来的项目中要用到多数据源,我负责这块的工作,所以查了一下资料,但是网上的资料还多都是千篇一律,抄袭过去,抄袭过来,所以自己试着成功了,希望对有需要的人帮助,如果有不正确的地方请扔砖头,经测试成功。话入正题。了解spring的大虾门肯定一看就知道这个原理,所以我就没有贴太多的注解了。如果有需要的可以留言交流

 一、spring3.0.5,mybatis3.0.5、的包都不多说了,需要引入关于atomikos的包如下

 二、关于spring的applicationcontext的配置:

读取数据库的信息

点击(此处)折叠或打开

  1. <!--属性文件读入,使用JdbcPlaceholderConfigurer则可以从数据库读取配置信息 -->
  2.     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  3.         <property name="locations">
  4.             <list>
  5.                 <value>classpath*:jdbc.properties</value>
  6.             </list>
  7.         </property>
  8.     </bean>
jdbc.properties的配置文件

点击(此处)折叠或打开

  1. jdbc.username=root
  2. jdbc.password=123456
  3. jdbc.url=jdbc:mysql://192.168.1.8:3310/sitestone?useUnicode=true&characterEncoding=utf-8
  4. jdbc.driver=com.mysql.jdbc.Driver

  5. jdbca.url=jdbc:mysql://192.168.1.8:3310/sitesttwo?useUnicode=true&characterEncoding=utf-8
  6. jdbca.username=root
  7. jdbca.password=123456
  8. jdbca.driver=com.mysql.jdbc.Driver
配置mysql的两个数据源

点击(此处)折叠或打开

  1. <!-- 两个数据源的功用配置,方便下面直接引用 -->
  2.      <bean id="abstractXADataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init"
  3.              destroy-method="close" abstract="true">
  4.         <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>
  5.         <property name="poolSize" value="10" />
  6.         <property name="minPoolSize" value="10"/>
  7.         <property name="maxPoolSize" value="30"/>
  8.         <property name="borrowConnectionTimeout" value="60"/>
  9.         <property name="reapTimeout" value="20"/>
  10.         <!-- 最大空闲时间 -->
  11.         <property name="maxIdleTime" value="60"/>
  12.         <property name="maintenanceInterval" value="60 />
  13.         <property name="loginTimeout" value="60"/>
  14.         <property name="logWriter" value="60"/>
  15.         <property name="testQuery">
  16.             <value>select 1</value>
  17.         </property>
  18.         
  19.     </bean>
  20.     <!-- 配置第一个数据源 -->
  21.     <bean id="dataSource" parent="abstractXADataSource">
  22.     <!-- value只要两个数据源不同就行,随便取名 -->
  23.         <property name="uniqueResourceName" value="mysql/sitestone" />
  24.         <property name="xaDataSourceClassName"
  25.             value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
  26.         <property name="xaProperties">
  27.             <props>
  28.                 <prop key="URL">${jdbc.url}</prop>
  29.                 <prop key="user">${jdbc.username}</prop>
  30.                 <prop key="password">${jdbc.password}</prop>
  31.             </props>
  32.         </property>
  33.     </bean>

  34.     <!-- 配置第二个数据源-->
  35.     <bean id="dataSourceB" parent="abstractXADataSource">
  36. <!-- value只要两个数据源不同就行,随便取名 -->
  37.         <property name="uniqueResourceName" value="mysql/sitesttwo" />
  38.         <property name="xaDataSourceClassName"
  39.             value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
  40.         <property name="xaProperties">
  41.             <props>
  42.                 <prop key="URL">${jdbca.url}</prop>
  43.                 <prop key="user">${jdbca.username}</prop>
  44.                 <prop key="password">${jdbca.password}</prop>
  45.             </props>
  46.         </property>
  47.     </bean>
配置sessionfactory


点击(此处)折叠或打开

  1. <!-- 配置mybatis的SessionFactory -->
  2.     <bean id="sqlSessionFactoryB" class="org.mybatis.spring.SqlSessionFactoryBean">
  3.         <!--mybatis的总配置文件-->
  4. <property name="configLocation" value="classpath:configurationb.xml"/>
  5. <!--扫描mybatis的写sql的mapper文件-->
  6.         <property name="mapperLocations" value="classpath*:/com/suntel/linkup/model/mappert/*Mapper.xml"/>
  7. <!----选择数据源------>
  8.         <property name="dataSource" ref="dataSourceB" />
  9.     </bean>

  10.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  11.         <property name="configLocation" value="classpath:configuration.xml"/>
  12.         <property name="mapperLocations" value="classpath*:/com/suntel/linkup/model/mapper/*Mapper.xml"/>
  13.         <property name="dataSource" ref="dataSource" />
  14.     </bean>
为dao中选择相应的SqlSessionTemplate,给sqlsession注入相应的session工厂,这样dao和有相应的数据库可以连接了

点击(此处)折叠或打开

  1. <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  2.             <constructor-arg index="0" ref="sqlSessionFactory" />
  3.         </bean>
  4.         <bean id="sqlSessionb" class="org.mybatis.spring.SqlSessionTemplate">
  5.             <constructor-arg index="0" ref="sqlSessionFactoryB" />
  6.         </bean>
举例说下关于dao的调用,注意下划线的地方;

点击(此处)折叠或打开

  1. private SqlSession sqlSessionb;
  2.     
  3.     public T create(String sql_ID,T entity) {
  4.         this.getSqlSessionb().insert(sql_ID, entity);
  5.         return entity;
  6.     }
  7.     public SqlSession getSqlSessionb() {
  8.         return sqlSessionb;
  9.     }

  10.     public void setSqlSessionb(SqlSession sqlSessionb) {
  11.         this.sqlSessionb = sqlSessionb;
  12.     }
  13. 这儿得sqlSessionb是和spring配置文件中的
  14. <bean id="sqlSessionb" class="org.mybatis.spring.SqlSessionTemplate">
  15.             <constructor-arg index="0" ref="sqlSessionFactoryB" />
  16.         </bean> 相对用的,名称和bean中的id要相同,
  17. 调用另一个数据session也是一样的原理:private SqlSession sqlSession;
  18.     public SqlSession getSqlSession() {
            return sqlSession;
        }

        public void setSqlSession(SqlSession sqlSession) {
            this.sqlSession = sqlSession;
        }
  19. <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  20.             <constructor-arg index="0" ref="sqlSessionFactory" />
  21.  </bean>
配置事务

点击(此处)折叠或打开

  1. <!-- 事务这块用spring管理atomikos -->
  2.     <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
  3.         init-method="init" destroy-method="close">
  4.         <property name="forceShutdown">
  5.             <value>true</value>
  6.         </property>
  7.     </bean>
  8.     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
  9.         <property name="transactionTimeout" value="300" />
  10.     </bean>

  11.     <bean id="springTransactionManager"
  12.         class="org.springframework.transaction.jta.JtaTransactionManager">
  13.         <property name="transactionManager">
  14.             <ref bean="atomikosTransactionManager" />
  15.         </property>
  16.         <property name="userTransaction">
  17.             <ref bean="atomikosUserTransaction" />
  18.         </property>
  19.         <!-- 必须设置,否则程序出现异常 JtaTransactionManager does not support custom isolation levels by default -->
  20.          <property name="allowCustomIsolationLevels" value="true"/>
  21.         
  22.     </bean>
  23.     <!-- 支持 @AspectJ 标记-->
  24.      <aop:aspectj-autoproxy />
  25.     
  26.  
  27.         <!-- 以AspectJ方式 定义 AOP -->
  28.     <aop:config proxy-target-class="true">
  29.         <aop:advisor pointcut="execution(* com.suntel.linkup.service..*.*(..))" advice-ref="txAdvice"/>
  30.     </aop:config>
  31.     
  32.      <!-- 配置事务传播特性:如果存在一个事务,则支持当前事务。如果没有事务则开启:REQUIRED -->
  33.     <tx:advice id="txAdvice" transaction-manager="springTransactionManager">
  34.         <tx:attributes>
  35.            <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
  36.            <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
  37.            <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
  38.            <tx:method name="create*" propagation="REQUIRED" rollback-for="Exception"/>
  39.            <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>
  40.            <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
  41.            <tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception"/>
  42.            <tx:method name="*" read-only="true"/>
  43.        </tx:attributes>
  44.     </tx:advice>

好了,代码贴完了,可以试着运行了。





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多