两张附图事务没配置的时候数据源切换正常,加上事务之后就一直显示的是默认连接的数据源,
这是为什么啊??百思不得其解,,求神哥神姐解惑啊
这个是数据源切换代码
切换的时候就是 每次在掉底层方法之前先设置下数据库 向下面这样
MultipleDataSource.setDataSourceKey("yz_dataSource");
MultipleDataSource.setDataSourceKey("news_dataSource");
事物的情况下,手动切换determineTargetDataSource即可,解决只换名称而不换DataSource的问题
把数据源切换代码贴出来,你用spring声明式的事务,它是绑定线程的,也不知道你切换是什么模式,不行自己手工写编程式的事务,也不难,不过aop要自己写罢了
还有,spring的事务是在切点中,会判断当前线程是否有事务,没有则会将数据源注入事务然后用threadload存起来,按照你这样的配置,事务始终也只会对当前数据源有效,当你切换数据源要么你自己也在spring的事务内同时也换数据源,不过这又要自己提交原来的事务!得不偿失,更麻烦!我是用spring编程式的事务实现的,事务自己管理,爱怎么换就怎么换
切换的时候就是 每次在掉底层方法之前先设置下数据库 向下面这样
哥们,遇到和你一样的问题了,如果你解决了,麻烦你和我说一下,谢谢了 1127653664
你如果事务是在service层,那么你切换数据源要在service之前切换,你如果在service里面是不能切换成功的
我也遇到了这个问题,仔细debug了一下,结论如下:
1. AOP可以触发数据源字符串的切换,这个没问题
2. 数据源真正切换的关键是 AbstractRoutingDataSource 的 determineCurrentLookupKey() **被调用,此方法是在open connection**时触发
3. 事务是在connection层面管理的,启用事务后,一个事务内部的connection是复用的,所以就算AOP切了数据源字符串,但是数据源并不会被真正修改
综上所述:
如果要使用事务,还是别用determineCurrentLookupKey()这种方法切数据源了,得配置多个才行
用正确的姿势看这里:http://blog.csdn.net/u013632755/article/details/51557956