开发者社区> 问答> 正文

Spring 同一Servie中切换数据源

系统中配置了MASTER和HISTORY两个数据源

先有如下需求

Service层方法a中调用方法b和方法c,方法b使用MASTER数据源,方法c使用HISTORY

现在我在b方法中使用ContextHolder将数据源切到MASTER上 c方法中在切到HISTORY上就不行了,c中还是使用MASTER数据源,请求各位大虾帮我分析下什么原因,是不是Spring事务配置造成的,该如何实现这样的切换,谢谢!

展开
收起
a123456678 2016-03-16 14:16:24 2587 0
1 条回答
写回答
取消 提交回答
  • 刚才翻了下我的开发日志,发现自己原来遇到过这个问题,也是非JTA环境下遇到的,根据记录显然非jta下的多数据源无法保证事务,但可以保证单数据源的事务。把记录的原文贴给你,希望能有帮助,不过描述的内容不一定正确:

    可以通过继承AbstractRoutingDataSource实现多数据源动态切换,但是需要注意事务的处理。当使用@Transactional注释时该注释会去getConnection(),如果在这之前没有手动切换数据源则拿到的连接无法确定。所以必须将@Transactional延迟到切换了数据源后再声明,目前的解决方案是:在controller层切换数据源,controller中调用的service方法上声明@Transactional。

    2019-07-17 19:03:57
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多