分布式事务atomikos

阅读更多

       上一篇介绍了分库分表插件,但是多库操作涉及到分布式事务问题,大家都知道分布式事务需要涉及到数据库XA驱动,oracle原本就支持,mysql在5.6版本支持了该属性,atomikos插件封装了该特性的一个中间件。现在来介绍一个atomikos的使用。

       首先是jar包依赖,maven配置如下:


	com.atomikos
	transactions
	4.0.4


	com.atomikos
	transactions-api
	4.0.4


	com.atomikos
	atomikos-util
	4.0.4


	com.atomikos
	transactions-jdbc-deprecated
	3.8.0


	com.atomikos
	transactions-jta
	4.0.4


	com.atomikos
	transactions-jdbc
	4.0.4

      额外的还要增加jta的配置,使用jta管理spring事务:


	javax.transaction
	jta
	1.1

 然后是srping配置,由于需要使用atomikos数据源,所以对上一篇分库分表插件的数据源配置做了修改:



	
	
		
		
		
		
			
				${jdbc.username}
				${jdbc.password}
				${jdbc.url}
			
		
		
		
		
	

	
	
		
		
		
		
			
				${jdbc.username}
				${jdbc.password}
				jdbc:mysql://127.0.0.1:3306/demodb00
			
		
		
		
		
	

	
	
		
		
		
		
			
				${jdbc.username}
				${jdbc.password}
				jdbc:mysql://127.0.0.1:3306/demodb01
			
		
		
		
		
	

	

	

	
		
			
				
			
		
	

	
		
		
		
			
				classpath:com/feng/mapper/user/*.xml
			
		
	

	
		
		
	

	
	
		
			true
		
	

	
		
	

	
		
			
		
		
			
		
		
	
	
		
			
			
			
			
			
			
			
			
			

			
		
	
 	
	
		
		
	

	
		
	

       运行一下,看到以下日志的兄弟,说明已经成功了,内心一阵狂热,胸膛也挺直了。    

[DEBUG][2017-04-17 09:58:27,821][com.atomikos.icatch.imp.CompositeTransactionImp]addParticipant ( XAResourceTransaction: 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D313439323339343330373730353030303035:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D35 ) for transaction com.atomikos.spring.jdbc.tm149239430770500005
[DEBUG][2017-04-17 09:58:27,821][com.atomikos.datasource.xa.XAResourceTransaction]XAResource.start ( 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D313439323339343330373730353030303035:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D35 , XAResource.TMNOFLAGS ) on resource master1 represented by XAResource instance com.mysql.jdbc.jdbc2.optional.JDBC4MysqlXAConnection@2c7e446d
[DEBUG][2017-04-17 09:58:27,840][com.atomikos.icatch.imp.CompositeTransactionImp]registerSynchronization ( com.atomikos.jdbc.AtomikosConnectionProxy$JdbcRequeueSynchronization@1f21ef16 ) for transaction com.atomikos.spring.jdbc.tm149239430770500005
[DEBUG][2017-04-17 09:58:27,841][com.atomikos.jdbc.AtomikosConnectionProxy]atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@2015fa5c: calling prepareStatement(INSERT INTO user_1 (id, name, age) VALUES (?, ?, ?),1003,1007,1)...
[DEBUG][2017-04-17 09:58:27,866][org.mybatis.spring.SqlSessionUtils]Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ac88402]
[DEBUG][2017-04-17 09:58:27,866][org.mybatis.spring.SqlSessionUtils]Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ac88402]
[DEBUG][2017-04-17 09:58:27,866][org.mybatis.spring.SqlSessionUtils]Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ac88402]
[DEBUG][2017-04-17 09:58:27,866][org.springframework.jdbc.datasource.DataSourceUtils]Returning JDBC Connection to DataSource
[DEBUG][2017-04-17 09:58:27,866][com.atomikos.jdbc.AtomikosConnectionProxy]atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@2015fa5c: close()...
[DEBUG][2017-04-17 09:58:27,866][com.atomikos.datasource.xa.XAResourceTransaction]XAResource.end ( 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D313439323339343330373730353030303035:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D35 , XAResource.TMSUCCESS ) on resource master1 represented by XAResource instance com.mysql.jdbc.jdbc2.optional.JDBC4MysqlXAConnection@2c7e446d
[DEBUG][2017-04-17 09:58:27,885][org.springframework.transaction.jta.JtaTransactionManager]Initiating transaction rollback
[DEBUG][2017-04-17 09:58:27,887][com.atomikos.datasource.xa.XAResourceTransaction]XAResource.rollback ( 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D313439323339343330373730353030303035:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D35 ) on resource master1 represented by XAResource instance com.mysql.jdbc.jdbc2.optional.JDBC4MysqlXAConnection@2c7e446d
[DEBUG][2017-04-17 09:58:27,906][com.atomikos.icatch.imp.CompositeTransactionImp]rollback() done of transaction com.atomikos.spring.jdbc.tm149239430770500005
[DEBUG][2017-04-17 09:58:27,907][com.atomikos.icatch.imp.CompositeTransactionImp]rollback() done of transaction com.atomikos.spring.jdbc.tm149239430770500005

   

最后提醒一下,业务的相关方法一定不要捕获异常,抛出来RunTimeException也不行,否则atomikos不能回滚,具体原因不明。

你可能感兴趣的:(分布式事务atomikos)