关于MYCAT 读写分离,与只读事务的问题.

习惯性为了复用mysql连接,喜欢加上@Transactional(readOnly = true) 只读事务,很多零碎的查询下,速度会快一些,也环保一些.

最近用mycat做了读写分离,其中一个查询加上了@Transactional(readOnly = true) ,居然出来了错误的数据,

删除事务后,数据正确,想了半天,是否读库写库的数据可能不一致.经过比较,果然有一条数据不一致

加上了事务以后(只读事务也是事务),MYCAT ,就一定会去查询写库.

 

只读事务:以下是我方法加上(方法里执行几十次简单快速的查询)

耗时:89880126 (纳秒),但是MYCAT会查询写库

 不使用事务注解:

耗时:117560025(纳秒),正确查询了读库

那么问题来了,有没有办法使用ThreadLocal里保存的Mysql连接,同时又可以让MYCAT正确的查询读库呢?

@Transactional(propagation = Propagation.NOT_SUPPORTED)

耗时:66755063(纳秒),正确查询了读库



 

posted @ 2017-09-18 19:23  181282945  阅读(5198)  评论(0编辑  收藏  举报