<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.0.xsd">
<!-- <bean class="com.common.processor.PrivilegetHandler"></bean>
-->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm"></property>
</bean>
<bean id="abstractTransactionProxy" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributeSource">
<bean
class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource" />
</property>
</bean>
<bean id="abstractTmsSessionProxy" abstract="true">
<property name="sessionFactory" ref="tmsSessionFactory" />
</bean>
<bean id="abstractWmsSessionProxy" abstract="true">
<property name="sessionFactory" ref="wmsSessionFactory" />
</bean>
<bean id="abstractFmsSessionProxy" abstract="true">
<property name="sessionFactory" ref="fmsSessionFactory" />
</bean>
<!-- WMS data source -->
<bean id="innerDataSourceA" class="org.enhydra.jdbc.standard.StandardXADataSource"
destroy-method="shutdown">
<property name="transactionManager">
<ref local="jotm" />
</property>
<property name="driverName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://192.168.1.110:3306/test1?autoReconnect=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf-8</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<bean id="dataSourceA" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"
destroy-method="shutdown">
<property name="dataSource">
<ref local="innerDataSourceA" />
</property>
<property name="transactionManager">
<ref local="jotm" />
</property>
<property name="maxSize">
<value>10</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<bean id="sessionFactoryA"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceA" />
<property name="mappingResources">
<list>
<value>com/systemmr/bean/hbm/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.transaction.factory_class">org.springframework.orm.hibernate3.SpringTransactionFactory</prop>
<prop key="hibernate.transaction.manager_lookup_class">org.springframework.orm.hibernate3.LocalTransactionManagerLookup</prop>
<prop key="jta.UserTransaction">java:comp/UserTransaction</prop>
</props>
</property>
<property name="jtaTransactionManager">
<ref bean="jotm" />
</property>
</bean>
<!--TMS data source -->
<bean id="innerDateSourceB" class="org.enhydra.jdbc.standard.StandardXADataSource"
destroy-method="shutdown">
<property name="transactionManager">
<ref local="jotm" />
</property>
<property name="driverName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://192.168.1.110:3306/test2?autoReconnect=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf-8</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<bean id="dataSourceB" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"
destroy-method="shutdown">
<property name="dataSource">
<ref local="innerDateSourceB" />
</property>
<property name="transactionManager">
<ref local="jotm" />
</property>
<property name="maxSize">
<value>10</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<bean id="sessionFactoryB"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceB" />
<property name="mappingResources">
<list>
<value>com/systemmr/bean/hbm/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.transaction.factory_class">org.springframework.orm.hibernate3.SpringTransactionFactory</prop>
<prop key="hibernate.transaction.manager_lookup_class">org.springframework.orm.hibernate3.LocalTransactionManagerLookup</prop>
<prop key="jta.UserTransaction">java:comp/UserTransaction</prop>
</props>
</property>
<property name="jtaTransactionManager">
<ref bean="jotm" />
</property>
</bean>
<!-- 定义事务管理器,使用适用于Hibernte的事务管理器 -->
<!-- <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean> -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="txManager" />
<property name="transactionAttributes">
<props>
<!-- 其他方法,采用required的事务策略 -->
<!-- <prop key="insert*">PROPAGATION_REQUIRED</prop> -->
<!-- <prop key="update*">PROPAGATION_REQUIRED</prop> -->
<!-- <prop key="save*">PROPAGATION_REQUIRED</prop> -->
<!-- <prop key="add*">PROPAGATION_REQUIRED</prop> -->
<!-- <prop key="edit*">PROPAGATION_REQUIRED</prop> -->
<!-- <prop key="create*">PROPAGATION_REQUIRED</prop> -->
<!-- <prop key="delete*">PROPAGATION_REQUIRED</prop> -->
<!-- 所有以find开头的方法,采用required的事务策略,并且只读 -->
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="doQuery*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Service</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 此处增加新的Interceptor -->
</list>
</property>
</bean>
<!-- 定义DAO bean的事务代理 -->
<!-- <bean id="personDao" -->
<!-- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> -->
<!-- 为事务代理bean注入事务管理器 -->
<!-- <property name="transactionManager"> -->
<!-- <ref bean="transactionManager" /> -->
<!-- </property> -->
<!-- 设置事务属性 -->
<!-- <property name="transactionAttributes"> -->
<!-- <props> -->
<!-- 所有以find开头的方法,采用required的事务策略,并且只读 -->
<!-- <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> -->
<!-- <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> -->
<!-- <prop key="doQuery*">PROPAGATION_REQUIRED,readOnly</prop> -->
<!-- <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop> -->
<!-- <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop> -->
<!-- 其他方法,采用required的事务策略 -->
<!-- <prop key="*">PROPAGATION_REQUIRED</prop> -->
<!-- </props> -->
<!-- </property> -->
<!-- 为事务代理bean设置目标bean -->
<!-- <property name="target"> -->
<!-- <ref local="basicDao" /> -->
<!-- </property> -->
<!-- </bean> -->
<!-- Autowired -->
<bean
class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
<bean id="hibernateTemplateA" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactoryA" />
</property>
</bean>
<bean id="hibernateTemplateB" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactoryB" />
</property>
</bean>
<bean id="testUserService" class="com.systemmr.service.impl.TestUserServiceImpl">
<property name="hibernateTemplateA" ref="hibernateTemplateA"></property>
<property name="hibernateTemplateB" ref="hibernateTemplateB"></property>
</bean>
</beans>
相关推荐
本资源针对的是Spring Boot动态多数据源和JTA(Java Transaction API)分布式事务的实现,对于初学者来说非常实用。下面我们将深入探讨这些知识点。 首先,让我们了解一下Spring Boot的多数据源。在许多业务场景下...
JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。 XA协议是数据库层面的一套分布式事务管理...
"多数据源事务之解决方案jta+atomikos"这个主题正是针对这一挑战提出的。JTA(Java Transaction API)和Atomikos是两个关键的组件,它们一起为Java应用提供了强大的分布式事务管理能力。 首先,JTA是Java平台企业版...
Spring MVC、MyBatis 和 JTA(Java Transaction API)的集成是企业级应用中常见的技术组合,用于构建可扩展且支持多数据源的应用程序。在本项目中,我们看到一个配置了多数据源的环境,其中Spring MVC作为前端控制器...
在Spring Boot应用中,整合JTA(Java Transaction API)实现多数据源事务管理是一个常见的需求,特别是在分布式系统中,为了确保数据的一致性和完整性。本文将深入探讨如何配置和使用Spring Boot与JTA来管理多个...
`JTA(Java Transaction API)`是Java平台提供的一种标准,用于处理跨多个数据存储的事务管理。这篇博客"多数据源事务jta测试"可能探讨了如何在Java环境中利用JTA来实现对不同数据库的事务一致性。 JTA允许应用程序...
本资源包含了两个子项目,分别进行了springboot+jpa+jdbcTemplate的多数据源独立事务配置和jta分布式事务配置,并针对不同的情况编写了事务配置测试接口,还演示了JPA的domain一对多自动生成数据库表且不生成数据库...
本示例项目"spring+mybatis+jta实现多数据源的分布式事务"提供了一种解决方案,利用Spring框架、MyBatis持久层框架以及Java Transaction API (JTA)来处理跨多个数据源的事务一致性。以下是对这一技术栈及其应用的...
本篇文档主要讲述如何使用Spring Boot结合MyBatis、JTA(Java Transaction API)以及Atomikos实现多数据源的事务管理。 ### Spring Boot框架 Spring Boot是Spring家族中的一个全新框架,用于简化新Spring应用的...
本文将深入探讨如何使用Spring、Java Transaction API (JTA) 和 Java Object Transaction Manager (JOTM) 实现多数据源更新的解决方案。 首先,让我们理解什么是多数据源。在传统的单数据源环境中,应用程序通常...
Atomikos是一款开源的JTA事务管理器,它支持分布式事务处理,使得在多个数据源之间进行事务操作成为可能。JTA是Java平台中的标准API,用于管理跨越多个资源(如数据库或消息队列)的事务。Atomikos通过实现JTA规范,...
本教程将详细介绍如何使用Spring Boot结合JTA(Java Transaction API)和Atomikos来配置多数据源事务。 首先,我们需要理解JTA的含义。JTA是Java平台的标准,用于管理跨多个数据源的分布式事务。它允许应用程序在一...
本项目使用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate和MySQL来实现分布式事务处理和多数据源管理,以确保在多个数据库操作之间保持事务的ACID特性。 首先,Spring Boot作为微服务开发的主流...
它允许应用程序在多个数据源或服务之间进行协调,确保事务的原子性、一致性、隔离性和持久性(ACID属性)。通过JTA,开发者可以跨数据库、消息队列等不同资源执行全局事务,使得分布式环境下的数据操作更加一致和...
3. **多线程(Multithreading)**:由于JTA可能会同时处理多个远程连接,因此多线程是其核心部分。每个连接通常会在一个独立的线程中运行,以确保并发性和响应性。 4. **安全性**:由于涉及到远程访问,JTA需要实现...
1.多数据源配置,采用方式:直接配置两个不同的数据源,不同的sessionFactory。 2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元...
在实际应用中,JTA的引入意味着Quartz可以跨多个资源(如数据库或消息队列)执行事务,这对于在复杂的分布式系统中保持数据一致性至关重要。而Commons-Collections则为这些操作提供了更高效的数据结构和算法支持。 ...
4. **XA Transactions**: JTA使用X/Open XA协议来支持两阶段提交(2PC)过程,确保跨多个资源的事务一致性。`XAResource`接口是实现这一协议的关键。 5. **TransactionSynchronizationRegistry**: 提供了在事务上...
JTA的主要目标是简化在复杂分布式环境下,跨多个资源管理器进行一致性和可靠性操作的过程。它通过定义一系列接口和协议,使得开发人员能够更专注于业务逻辑的实现,而不必深入理解底层的事务管理和并发控制机制。 #...