atomikosdatasourcebean mysql_Atomikos+jdbcdslog——分布式事务管理输出实际log日志

本文介绍了如何在Atomikos分布式事务管理中,使用jdbcdslog-exp实现MySQL和Oracle数据库的SQL日志记录。通过自定义AtomikosDataSourceBean解决配置问题,确保在事务中切换数据源时的日志输出。
摘要由CSDN通过智能技术生成

[项目进行读写分离及分库分表,在一个业务中,在一个事务中处理时候将切换多个数据源,需要保证同一事务多个数据源数据的一致性。此处使用atomikos来实现:最后附源码:1:

前言

想看实际产生的SQL,在一个数据源的情况下,最简单的方式是使用Log4jdbc。

但在spring-data-jpa通过Atomikos实现JTA事务中,我们通过Atomikos实现了分布式事务,配置的是支持XA的DataSource,Log4jdbc这种在Driver上做文章的方法肯定不行。

这里使用jdbcdslog的衍生项目jdbcdslog-exp来实现这个目标。jdbcdslog-exp比jdbcdslog更进了一步,输出的SQL,可以直接拷贝到PL/SQL等工具下执行。

依赖

jdbcdslog的依赖如下

com.googlecode.usc

jdbcdslog

1.0.6.2

配置方式

properties配置信息

这里以Oracle为例,properties内容如下,当然dataSource配置信息等需要两份

dev.jdbc.dataSource=org.jdbcdslog.ConnectionPoolXADataSourceProxy

dev.jdbc.url=jdbc:oracle:thin:@192.168.3.129:1521:gtf?targetDS=oracle.jdbc.xa.client.OracleXADataSource

dev.jdbc.username=adp_dev

dev.jdbc.password=adp_dev

其中url相当于url + targetDS ,targetDS的值为普通方式下的dataSource。

配置文件

destroy-method="close">

${dev.jdbc.url}

${dev.jdbc.username}

${dev.jdbc.password}

问题

实际运行时会发生错误,原因是由于AtomikosDataSourceBean中doInit方法中在该方法的最后才调用的PropertyUtils.setProperties(xaDataSource, xaProperties );这段代码,导致上面调用setLogWriter的时候缺少参数。

[ 网上有很多的atomikos的分布式事务管理的配置,但是大多数都是同一类型的数据库,并没有跨数据库类型的配置。使用的数据库是Oracle和mysql。 配置文件代码如下:

解决方法

1.提供一个无视set/get方法的反射工具;

2.AtomikosDataSourceBean中用到的参数AtomikosXAConnectionFactory 没有访问修饰符,无法访问的问题;

3.重新实现一个AtomikosDataSourceBean类,并重写doIn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值