• spring JTA多数据源事务管理详细教程


    <context:annotation-config />
    <!-- 使用注解的包路径 -->
    <context:component-scan
        base-package="com.rongli.service,com.rongli.dao,com.rongli.controller" />
    <!-- 支持 @Transactional 标记 -->
    <tx:annotation-driven transaction-manager="springJTATransactionManager"
        proxy-target-class="true" />
    <!-- 导入cxf配置文件 -->
    <import resource="ws.cxf.xml" />
    
    <!-- 加载properties配置文件 -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jta.jdbc.properties</value>
            </list>
        </property>
    </bean>
    
    <!--公有数据库连接池 -->
    <bean id="abstractXADataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
        init-method="init" destroy-method="close" abstract="true">
        <property name="xaDataSourceClassName"
            value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
        <property name="poolSize" value="10" />
        <property name="minPoolSize" value="10" />
        <property name="maxPoolSize" value="30" />
        <!--获取连接失败重新获等待最大时间,在这个时间内如果有可用连接,将返回 -->
        <property name="borrowConnectionTimeout" value="60" />
        <!--最大获取数据时间,如果不设置这个值,Atomikos使用默认的5分钟, 那么在处理大批量数据读取的时候,一旦超过5分钟,就会抛出类似 Resultset 
            is close 的错误. -->
        <property name="reapTimeout" value="20000" />
        <!-- 最大空闲时间 -->
        <property name="maxIdleTime" value="60" />
        <!--连接回收时间 -->
        <property name="maintenanceInterval" value="60" />
        <!--java数据库连接池,最大可等待获取datasouce的时间 -->
        <property name="loginTimeout" value="60" />
        <property name="testQuery">
            <value>select 1</value>
        </property>
    </bean>
    
    <!-- 客户数据库 -->
    <bean id="rlc_cus" parent="abstractXADataSource">
        <property name="uniqueResourceName" value="mysql/rlc_cus" />
        <property name="xaProperties">
            <props>
                <prop key="URL">${jdbc.rlc_cus.properties}</prop>
                <prop key="user">${jdbc.rlc.user}</prop>
                <prop key="password">${jdbc.rlc.password}</prop>
                <prop key="pinGlobalTxToPhysicalConnection">true</prop>
            </props>
        </property>
    </bean>
    
    <!-- 系统数据库 -->
    <bean id="rlc_sys" parent="abstractXADataSource">
        <property name="uniqueResourceName" value="mysql/rlc_sys" />
        <property name="xaProperties">
            <props>
                <prop key="URL">${jdbc.rlc_sys.properties}</prop>
                <prop key="user">${jdbc.rlc.user}</prop>
                <prop key="password">${jdbc.rlc.password}</prop>
                <prop key="pinGlobalTxToPhysicalConnection">true</prop>
            </props>
        </property>
    </bean>
    
    <!-- 公有SessionFactory配置 -->
    <bean id="baseSessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
        abstract="true">
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.format_sql}</prop>
                <prop key="hibernate.format_sql">${hibernate.show_sql}</prop>
                <prop key="javax.persistence.validation.mode">none</prop>
            </props>
        </property>
        <!-- 自动扫描注解方式配置的hibernate类文件 -->
        <property name="packagesToScan" value="com.rongli.bean"></property>
    </bean>
    
    <!-- sessionFactory配置 -->
    <!-- customer sessionFactory -->
    <bean id="cusSessionFactory" parent="baseSessionFactory">
        <property name="dataSource" ref="rlc_cus" />
    </bean>
    <!-- system sessionFactory -->
    <bean id="sysSessionFactory" parent="baseSessionFactory">
        <property name="dataSource" ref="rlc_sys" />
    </bean>
    
    <!-- atomikos事务管理器 -->
    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
        init-method="init" destroy-method="close">
        <!-- 调用终止时,强制关闭 -->
        <property name="forceShutdown">
            <value>true</value>
        </property>
    </bean>
    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
        <property name="transactionTimeout">
            <value>2000</value>
        </property>
    </bean>
    
    <!-- spring 事务管理器 -->
    <bean id="springJTATransactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager">
            <ref bean="atomikosTransactionManager" />
        </property>
        <property name="userTransaction">
            <ref bean="atomikosUserTransaction" />
        </property>
    </bean>
    
    <!-- 用于测试,发布到服务器上时删除 -->
    <bean id="systemServiceImpl" class="com.rongli.service.impl.SystemServiceImpl">
    </bean>
  • 相关阅读:
    冲刺阶段 day1
    目标系统流程图 数据流图
    团队作业二
    校外实习报告(十二)
    校外实习报告(十一)
    第二周实习总结
    校外实习报告(十)
    校外实习报告(九)
    校外实习报告(八)
    校外实习报告(七)
  • 原文地址:https://www.cnblogs.com/walk-the-Line/p/5620841.html
Copyright © 2020-2023  润新知