Bootstrap

读写分离中事务管理

今天初学mycat读写分离遇到问题,记录一下:
我们完全配置好mycat的读写分离和逻辑库时,测试发现并没有按照我们想的那样读写分离,读的数据是从主库中来。我遇到这种问题的原因是:

我的项目中service采用了Spring的 @Transactional 注解来管理事务。由于spring的事务管理具有传播性,所以service读操作也具有了事务。mycat发现我们的读操作中有事务时,就会从主库读取,因为怕我们具有了事务特性后,在读操作中附带一些写操作而导致主从不一致。所以会从主库读取。

解决办法:

@Transactional(propagation=Propagation.SUPPORTS)
//在读操作方法上单独控制事务
//如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

所以,我建议为了读写分离正常有效,以后在每个读操作的方法上习惯性使用该注解。时刻提醒自己!!!

;