使用atomikos事物管理搞定了以com.atomikos.jdbc.AtomikosDataSourceBean方式配置的分布式事物(datasource配置如下),但是使用alibaba的druid缺导致服务启动不了.
<bean id="mysqlDataSource1" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="MYSQL_1" />
<property name="xaDataSourceClassName" value="${xaDriverClassName}" />
<property name="xaProperties">
<props>
<prop key="URL">${url}</prop>
<prop key="user">${username}</prop>
<prop key="password">${password}</prop>
</props>
</property>
.......
</bean>
以下是druid的配置,结合atomikos了
<bean id="mysqlDataSource_1" class="com.alibaba.druid.pool.xa.DruidXADataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" />
</bean>
<bean id="mysqlDataSource1" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="MYSQL_1" />
<property name="xaDataSource" ref="mysqlDataSource_1" />
<property name="poolSize" value="10" />
<property name="minPoolSize" value="10" />
<property name="maxPoolSize" value="30" />
</bean>
<!-- atomikos分布式事物 -->
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown" value="true" />
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="300" />
</bean>
<bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="atomikosTransactionManager" />
<property name="userTransaction" ref="atomikosUserTransaction" />
<property name="allowCustomIsolationLevels" value="true" />
<property name="globalRollbackOnParticipationFailure" value="true" />
</bean>
<tx:annotation-driven transaction-manager="jtaTransactionManager" proxy-target-class="true" />
以下是启动日志
**** INFO - 2015-01-06 11:43:30,249 - AtomikosDataSoureBean 'MYSQL_1': init... - com.atomikos.logging.Slf4jLogger.logInfo(Slf4jLogger.java:16) main 4472
**** INFO - 2015-01-06 11:43:30,260 - AtomikosDataSoureBean 'MYSQL_1': initializing with [ xaDataSourceClassName=null, uniqueResourceName=MYSQL_1, maxPoolSize=30, minPoolSize=10, borrowConnectionTimeout=30, maxIdleTime=60, reapTimeout=0, maintenanceInterval=60, testQuery=null, xaProperties=[], loginTimeout=0, maxLifetime=0] - com.atomikos.logging.Slf4jLogger.logInfo(Slf4jLogger.java:16) main 4483
**** DEBUG - 2015-01-06 11:43:30,273 - Configuration: adding resource MYSQL_1 - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4496
**** DEBUG - 2015-01-06 11:43:30,273 - Installing recovery service on resource MYSQL_1 - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4496
**** DEBUG - 2015-01-06 11:43:30,274 - MYSQL_1: refreshing XAResource... - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4497
**** INFO - 2015-01-06 11:43:30,276 - New update(s) found: 2.4.7 [http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.4]. Please check http://ehcache.org for the latest version. - net.sf.ehcache.util.UpdateChecker.doCheck(UpdateChecker.java:98) net.sf.ehcache.CacheManager@4e44ac6a 4499
**** INFO - 2015-01-06 11:43:30,547 - MYSQL_1: refreshed XAResource - com.atomikos.logging.Slf4jLogger.logInfo(Slf4jLogger.java:16) main 4770
**** DEBUG - 2015-01-06 11:43:30,547 - recovery initiated for resource MYSQL_1 with branchIdentifier 10.144.32.149.tm - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4770
**** DEBUG - 2015-01-06 11:43:30,550 - endRecovery() done for resource MYSQL_1 - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4773
**** DEBUG - 2015-01-06 11:43:30,550 - Configuration: added resource MYSQL_1 - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4773
**** DEBUG - 2015-01-06 11:43:30,559 - atomikos connection pool 'MYSQL_1': initializing... - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4782
**** DEBUG - 2015-01-06 11:43:30,588 - an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s): registering listener atomikos connection pool 'MYSQL_1' - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4811
**** DEBUG - 2015-01-06 11:43:30,605 - an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s): registering listener atomikos connection pool 'MYSQL_1' - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4828
**** DEBUG - 2015-01-06 11:43:30,624 - an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s): registering listener atomikos connection pool 'MYSQL_1' - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4847
**** DEBUG - 2015-01-06 11:43:30,638 - an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s): registering listener atomikos connection pool 'MYSQL_1' - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4861
**** DEBUG - 2015-01-06 11:43:30,657 - an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s): registering listener atomikos connection pool 'MYSQL_1' - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4880
**** DEBUG - 2015-01-06 11:43:30,677 - an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s): registering listener atomikos connection pool 'MYSQL_1' - com.atomikos.logging.Slf4jLogger.logDebug(Slf4jLogger.java:20) main 4900
**** DEBUG - 2015-01-06 11:43:30,696 - an AtomikosXAPooledConnection with a SessionHandleState with 0 context(s): registering listener atomikos connection pool 'MYSQL_1'
相关推荐
本示例"spring+atomikos+druid分布式事务Demo"聚焦于如何在Spring框架中利用Atomikos和Druid来处理分布式事务。接下来,我们将深入探讨这三个组件以及它们在实现分布式事务中的作用。 Spring是一个广泛使用的Java...
总的来说,`spring+druid+atomikos`的组合提供了一种强大的分布式事务解决方案,尤其适用于那些需要处理复杂事务逻辑和多数据源切换的应用。但需要注意的是,这种解决方案可能会增加系统的复杂性,因此在实际应用中...
本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...
6. **应用服务(App Service)**:业务代码所在的层,通过Seata客户端与TC交互,启动和提交分布式事务。 在"seata-demo-at-master"这个压缩包中,你应该能找到一个关于如何配置和使用Seata进行AT模式分布式事务的...
总结起来,SSM框架整合Seata实现分布式事务主要涉及以下几个步骤:添加Seata依赖,配置数据源,部署Seata Server,配置应用服务,以及使用@GlobalTransactional注解。这样的整合使得开发者能够在不改变原有业务逻辑...
在现代企业级应用中,尤其是在微服务架构下,分布式事务处理成为了一项挑战。本项目"springboot-mybatis-atomikos.zip"正是为了解决这一问题而设计的,它通过集成Atomikos、MyBatis、MySQL、Druid以及SpringBoot,...
MyBatis与Spring整合后,可以实现事务管理、依赖注入等功能,让数据库操作更加简单和灵活。 Druid是阿里巴巴开源的一个数据库连接池实现,它不仅提供了监控、扩展性,还有更好的性能。Druid提供了强大的监控和扩展...
5. **Seata分布式事务**:Seata(前身FATBOY)是阿里巴巴开源的分布式事务解决方案,它提供了AT、TCC、SAGA、XA等事务模式,旨在解决微服务环境下的分布式事务问题。Nacos与Seata配合,可以实现跨服务的分布式事务...
但需要注意的是,跨库事务可能需要更高级的分布式事务解决方案,如2PC(两阶段提交)或补偿事务。 7. **性能优化**:为了优化读写分离的效果,我们还需要考虑一些其他因素,比如数据库的负载均衡、缓存策略、读写...
在这个框架中,SpringBoot简化了Spring应用的初始化和配置,MyBatis作为持久层框架提供了灵活的SQL映射功能,而Druid则是一个强大的数据库连接池,可以提高数据库访问性能。 【描述】"springboot + mybatis(通用...
5. `application.properties`或`application.yml`:SpringBoot的配置文件,配置应用的属性。 6. `README.md`:项目介绍和使用指南。 7. `.gitignore`:定义Git忽略的文件和目录。 这个项目Demo将帮助开发者了解如何...
项目中的文件可能包括配置文件(如application.yml或application.properties)、Spring Boot的启动类、AOP切面配置、JTA相关配置、数据库连接池配置(如HikariCP或Druid)、主从数据库配置、数据源切换逻辑实现等。...
Sharding-JDBC提供了数据路由、分布式事务以及分片规则管理等功能,使得应用能够轻松应对大数据量场景。 2. **SpringBoot**:SpringBoot是Spring框架的扩展,它极大地简化了Spring应用的初始搭建以及开发过程。在本...
**配置应用**:在业务应用中配置Seata客户端,指定TC-Server的地址和服务名等。 3. **编写代码**:按照Seata文档中的指导,编写参与分布式事务的代码逻辑。 #### 四、总结 通过以上步骤,我们可以成功地部署并...
- **静态数据源**:在应用程序启动时配置好,一旦设定,除非重启应用,否则无法改变。适合单数据库、需求稳定的应用场景。 - **动态数据源**:在运行时可以根据需求动态地切换或添加数据源,比如读写分离、故障...
Dynamic-Datasource,则是解决多数据源问题的关键,特别是在微服务架构中,每个服务可能需要连接到不同的数据库,或者在分布式事务中需要切换不同的数据源。mybatis-plus-dynamic-datasource 就是将 MyBatis-Plus 与...
- **ACID、CAP、Base理论**:在理解分布式事务时,需要了解ACID(原子性、一致性、隔离性、持久性)、CAP(一致性、可用性、分区容错性)和Base(基本可用、软状态、最终一致性)理论。 - **Zookeeper基础组件...
项目中的“动态配置”指的是在运行时改变数据源的设置,而不是在应用启动时静态定义。这通常涉及到一个数据源管理器,它可以接收前端的请求,根据请求参数动态地选择合适的数据源。例如,通过一个中央配置服务,应用...
4. **启动 Nacos**:完成上述配置后,重新启动 Nacos 服务,它应该会使用配置的 Oracle 数据库进行数据存储。 Nacos 与 Oracle 结合使用时,可以实现以下功能: - **服务注册与发现**:微服务可以在 Oracle 存储的...