springboot中如何使用多数据源下的事务管理
现在springboot项目使用继承AbstractRoutingDataSource的方法
动态切换数据源,ORM使用mybatis
尝试使用事务注解会造成切数据库失败的情况,
请问这个时候如何使用事务处理,还有springboot能否直接使用
txmanager管理所有的service层
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
具体需要怎么做的呢 现在session open是由mybatis进行管理的
回复
@sonicx991 : 注入SessionFactory到Service中,需要切换的时候getSession()然后open,需要注意的是,这个时候,open的Session是不受管理的,也就是说,你需要setAutoCommit(false)然后手动事务同步,并且,这个session是不能向下同步的
springboot使用多数据源,如果在事务中切换数据源是会有问题的,是由于springboot的事务同步机制造成的,在开启了事务后,springboot会在当前线程记录下sessionfactory对应的session,然后,由于你用的是AbstractRoutingDataSource,切换数据源时需要重新Open一个session的,而springboot在open一个session,会先判断是是否开启了事务,如果是,则在缓存里面,通过sessionfactory获取session,然后嘛,你只有一个sessionfactory,且你开启了事务,so,嵌套的service会使用相同的session,所以,切换数据库无效,若需要在事务中切换其它数据源,需要手动opensession