Spring3 集成 Hibernate4,使用Atomikos实现分布式事务控制
注意事项
<!-- 5. 配置事务管理器 注意是,hibernate4,配置成hibernate3报错 -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
配置文件:
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" > <!-- 分布式 事务处理 开始.....--> <!-- PropertyPlaceholderconfigure是一个Bean后处理器,它读取属性文件信息, 并将这些信息设置为Spring配置文件元数据,这里用于读取数据库连接信息 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>dbconn.properties</value> <!-- 这里可列出多个属性文件 --> </list> </property> </bean> <!--1. 配置数据源,使用 Atomikos连接池--> <!--mysql数据源--> <bean id="mysqlDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <description>mysql xa datasource</description> <property name="uniqueResourceName"> <value>mysql_ds</value> </property> <property name="xaDataSourceClassName" value="${dbmysql.driverClassName}" /> <property name="xaProperties"> <props> <prop key="user">${dbmysql.username}</prop> <prop key="password">${dbmysql.password}</prop> <prop key="URL">${dbmysql.url}</prop> </props> </property> <!-- 连接池里面连接的个数 --> <property name="poolSize" value="3"/> </bean> <!--oracle数据源--> <bean id="oracleDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <description>oracle xa datasource</description> <property name="uniqueResourceName"> <value>oracle_ds</value> </property> <property name="xaDataSourceClassName"> <value>${dboracle.driverClassName}</value> </property> <property name="xaProperties"> <props> <prop key="user">${dboracle.username}</prop> <prop key="password">${dboracle.password}</prop> <prop key="URL">${dboracle.url}</prop> </props> </property> <!-- 连接池里面连接的个数 --> <property name="poolSize" value="3"/> </bean> <!-- 2. 配置sessionFactory --> <!-- 2.1 配置mysql 的 sessionFactory --> <bean id="mysqlSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!--dataSource属性指定要用到的连接池--> <property name="dataSource" ref="mysqlDataSource"/> <!--指定要用到的实体映射文件--> <property name="mappingResources"> <list> <value>com/test/hibernate/mapping/News.hbm.xml</value> </list> </property> <!--配置Hibernate的属性--> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=true hibernate.temp.use_jdbc_metadata_defaults=false </value> </property> </bean> <!-- 2.2 配置oracle 的 sessionFactory --> <bean id="oracleSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!--dataSource属性指定要用到的连接池--> <property name="dataSource" ref="oracleDataSource"/> <!--指定要用到的实体映射文件--> <property name="mappingResources"> <list> <value>com/test/hibernate/mapping/News.hbm.xml</value> </list> </property> <!--配置Hibernate的属性--> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.OracleDialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=true hibernate.temp.use_jdbc_metadata_defaults=false </value> </property> </bean> <!--3. 配置atomikos事务管理器 --> <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <description>UserTransactionManager</description> <property name="forceShutdown"> <value>true</value> </property> </bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> <property name="transactionTimeout" value="300" /> </bean> <!--4.配置 spring 的 jta分布式事务管理器 --> <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager"> <ref bean="atomikosTransactionManager" /> </property> <property name="userTransaction"> <ref bean="atomikosUserTransaction" /> </property> </bean> <!--5. 事务配置,主要是使用的transaction-manager不一样 配置增强处理的bean(相当于切面类),也是Spring自动生成普通 业务逻辑bean(targetBean)的代理Bean.里面的tx:method配置每个方法的事务属性, name配置方法名,可使用通配符. --> <tx:advice id="txJpaAdvice" transaction-manager="txManager"> <!-- 配置详细的事务语义 --> <tx:attributes> <!-- 表示get开头的方法是只读的 --> <tx:method name="get*" read-only="true" propagation="REQUIRED"/> <!-- 其他方法使用默认的事务设置 --> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 6. 全局事务切面配置,AOP元素配置 --> <aop:config> <!-- 配置一个切入点 test.hibernate.business包下面所有类的所有方法,都会被加入事务 --> <aop:pointcut id="myJpaPoint" expression="execution(* test.hibernate.business.*.*(..))" /> <!-- 配置 (事务代理)切入点(aop:pointcut) 和 切面类(tx:advice),将二者关联起来 --> <aop:advisor advice-ref="txJpaAdvice" pointcut-ref="myJpaPoint" /> </aop:config> <!--7. 配置两个数据源的Dao,并注入 sessionFactory--> <bean id = "jtaDaoMysqlImp1" class = "test.hibernate.pojo.dao.NewsDao"> <property name="sessionFactory" ref="mysqlSessionFactory"/> </bean> <bean id = "jtaDaoOracleImp1" class = "test.hibernate.pojo.dao.NewsDao"> <property name="sessionFactory" ref="oracleSessionFactory"/> </bean> <!-- 8. 配置business业务逻辑层Bean,需要注入两个Dao层Bean --> <bean id = "newsBusiness" class = "test.hibernate.business.NewsBusiness"> <property name="jtaNewsDaoMysql" ref="jtaDaoMysqlImp1"/> <property name="jtaNewsDaoOracle" ref="jtaDaoOracleImp1"/> </bean> </beans>
相关推荐
本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...
本教程将聚焦于如何利用Spring 3.0、Hibernate ORM框架以及Atomikos这个开源事务管理器来实现高效、可靠的多数据源分布式事务处理。 **Spring 3.0**: Spring是Java开发中最广泛使用的轻量级框架之一,它提供了一个...
在Web项目中使用Atomikos实现分布式事务,通常包括以下步骤: 1. **集成Atomikos**:首先,你需要将Atomikos的依赖库添加到你的项目中,这可以通过Maven或Gradle的依赖管理来完成。确保引入的版本与你的项目所使用...
本教程将探讨如何结合Spring和Atomikos来实现分布式事务。 首先,我们需要理解什么是分布式事务。在分布式环境中,事务跨越多个资源管理器,如数据库或消息队列。为了确保ACID(原子性、一致性、隔离性和持久性)...
本主题将探讨“Spring4+Hibernate4+Atomikos3.3多数据源事务管理”的相关知识点,这是一种实现分布式事务处理的有效方案。 首先,Spring框架是Java企业级应用中的核心组件,它提供了一个统一的依赖注入容器,简化了...
本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...
1. Spring配置:包含Spring的事务管理器配置,可能使用`PlatformTransactionManager`接口和Atomikos的实现。 2. Atomikos配置:通常会有一个XML配置文件,定义了事务管理器和用户交易服务。 3. Druid数据源配置:...
在Spring中集成Atomikos,可以实现全局的分布式事务管理,确保在分布式环境下的数据一致性。 4. **配置多数据源** 在Spring的XML配置文件中,我们需要为每个数据源创建一个`AtomikosDataSourceBean`实例,并配置...
5. **配置Spring事务管理器**:创建Atomikos事务管理器的bean,并配置Spring的PlatformTransactionManager,指定使用Atomikos的UserTransaction。 6. **代码实现**:在业务逻辑中,通过Spring的@Transactional注解...
本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在多资源环境下进行事务管理,比如跨越多个数据库或者消息队列的服务。它包括三个主要组件:...
本案例主要探讨如何利用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate以及MyBatis,结合MySQL数据库,实现一个跨数据源的分布式事务解决方案。 首先,Spring Boot是一个基于Spring框架的快速开发...
在这个案例中,我们将深入探讨如何使用Spring 4与Atomikos来实现跨数据库的分布式事务管理。 Atomikos是一款开源的事务处理监控器(Transaction Processing Monitor,TPM),它支持JTA(Java Transaction API)标准...
至于“src”这个压缩包文件,很可能包含了示例代码或者项目源码,读者可以下载并运行这些代码来更好地理解和学习Spring、Hibernate与Atomikos集成的分布式事务实现。通过阅读和分析这些源码,开发者能够加深对相关...
本文将深入探讨如何在SpringBoot框架中集成JTA(Java Transaction API)和Atomikos来实现分布式事务管理。这是一项关键的技术,特别是在微服务架构中,它保证了跨服务操作的原子性。 首先,`pom.xml`是Maven项目的...
本教程将聚焦于如何在若依单体项目中集成Atomikos来实现分布式事务管理。 若依是一个基于Spring Boot的轻量级企业级快速开发平台,适用于构建各种规模的企业级应用。在单体项目中,当业务逻辑涉及多个数据库或服务...
使用spring + atomikos+druid配置的分布式事务demo,两种数据源配置方式都可以,使用junit测试没问题,案例中使用的mysql数据库是8.0.11版本,版本不同请自行修改pom.xml和jdbc.properties
本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...
SSH + atomikos 打造Java分布式事务 web工程 直接导入myeclipse即可运行 数据库可参照mutilDataSource/model下的实体类进行创建(两个表)数据库使用的是oracle
Atomikos是一个开源的事务处理系统,专门设计用于在Java应用程序中实现分布式事务管理。它提供了JTA(Java Transaction API)的实现,使得开发者能够在不同的数据源之间进行复杂的事务操作,确保数据的一致性和完整...
Spring Boot集成Atomikos进行分布式事务管理,主要步骤包括: 1. 引入依赖:在项目中添加Atomikos的依赖,确保项目能够访问其提供的JTA服务。 2. 配置Atomikos:配置文件中设置Atomikos的相关参数,如事务超时时间、...