现在的位置: 首页 > 综合 > 正文

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

2019年06月21日 ⁄ 综合 ⁄ 共 6855字 ⁄ 字号 评论关闭


话入正题。了解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&amp;characterEncoding=utf-8
  4. jdbc.driver=com.mysql.jdbc.Driver
  5. jdbca.url=jdbc:mysql://192.168.1.8:3310/sitesttwo?useUnicode=true&amp;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>

抱歉!评论已关闭.