系统中配置了MASTER和HISTORY两个数据源
先有如下需求
Service层方法a中调用方法b和方法c,方法b使用MASTER数据源,方法c使用HISTORY
现在我在b方法中使用ContextHolder将数据源切到MASTER上 c方法中在切到HISTORY上就不行了,c中还是使用MASTER数据源,请求各位大虾帮我分析下什么原因,是不是Spring事务配置造成的,该如何实现这样的切换,谢谢!
刚才翻了下我的开发日志,发现自己原来遇到过这个问题,也是非JTA环境下遇到的,根据记录显然非jta下的多数据源无法保证事务,但可以保证单数据源的事务。把记录的原文贴给你,希望能有帮助,不过描述的内容不一定正确:
可以通过继承AbstractRoutingDataSource实现多数据源动态切换,但是需要注意事务的处理。当使用@Transactional注释时该注释会去getConnection(),如果在这之前没有手动切换数据源则拿到的连接无法确定。所以必须将@Transactional延迟到切换了数据源后再声明,目前的解决方案是:在controller层切换数据源,controller中调用的service方法上声明@Transactional。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。