spring aop与事务小结

项目需要,搭建过程使用了spring+mybatis+mysql,一台服务器需要同时连接两个数据库AB。其中,AB两库分区域部署,各为该区域的主库,领导反馈mysql异步复制不可靠,因此需要在程序里自行实现双写。

踩过的坑:使用spring注解事务,对service层的方法进行注解,

@afterreturning后

用数据源选择器,切换数据源

调用joinpoint的proceed方法,当insert语句执行后,报错主键冲突。

查看日志,切换数据源不成功。

查资料后了解到使用事务注解后,由于我的mybatis sessionfactory归spring管理,事务打开后数据源无法切换。因此永远只能写

一个库。


之后改用 @around作为织入时机,方法调用前使用编程式事务,增加mapper调用的切点,每次mapper执行后不做写库操作,而是把mapper和参数存在内存表中,待事务结束后,建立事务,重复一次内存表的操作,非完美方式解决。 

你可能感兴趣的:(离异男)