springboot中如何使用多数据源下的事务管理

发布于 2021-12-09 10:48:33 字数 185 浏览 990 评论 3

现在springboot项目使用继承AbstractRoutingDataSource的方法

动态切换数据源,ORM使用mybatis

尝试使用事务注解会造成切数据库失败的情况,

请问这个时候如何使用事务处理,还有springboot能否直接使用

txmanager管理所有的service层

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海之角 2021-12-10 01:13:32

具体需要怎么做的呢 现在session open是由mybatis进行管理的

凌乱心跳 2021-12-09 23:13:57

回复
@sonicx991 : 注入SessionFactory到Service中,需要切换的时候getSession()然后open,需要注意的是,这个时候,open的Session是不受管理的,也就是说,你需要setAutoCommit(false)然后手动事务同步,并且,这个session是不能向下同步的

巡山小妖精 2021-12-09 19:55:15

springboot使用多数据源,如果在事务中切换数据源是会有问题的,是由于springboot的事务同步机制造成的,在开启了事务后,springboot会在当前线程记录下sessionfactory对应的session,然后,由于你用的是AbstractRoutingDataSource,切换数据源时需要重新Open一个session的,而springboot在open一个session,会先判断是是否开启了事务,如果是,则在缓存里面,通过sessionfactory获取session,然后嘛,你只有一个sessionfactory,且你开启了事务,so,嵌套的service会使用相同的session,所以,切换数据库无效,若需要在事务中切换其它数据源,需要手动opensession

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文