习惯性为了复用mysql连接,喜欢加上@Transactional(readOnly = true) 只读事务,很多零碎的查询下,速度会快一些,也环保一些.
最近用mycat做了读写分离,其中一个查询加上了@Transactional(readOnly = true) ,居然出来了错误的数据,
删除事务后,数据正确,想了半天,是否读库写库的数据可能不一致.经过比较,果然有一条数据不一致
加上了事务以后(只读事务也是事务),MYCAT ,就一定会去查询写库.
只读事务:以下是我方法加上(方法里执行几十次简单快速的查询)
耗时:89880126 (纳秒),但是MYCAT会查询写库
不使用事务注解:
耗时:117560025(纳秒),正确查询了读库
那么问题来了,有没有办法使用ThreadLocal里保存的Mysql连接,同时又可以让MYCAT正确的查询读库呢?
@Transactional(propagation = Propagation.NOT_SUPPORTED)
耗时:66755063(纳秒),正确查询了读库