如题,根据 https://my.oschina.net/yejunxi/blog/916555 配置多数据源后,使用AOP切换数据源
在service层使用注解@Transactional后,调用该方法会抛异常
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx数据库.xx表' doesn't exist
原因是没有在事务前切换到对应数据源,使用Order注解,提高优先级
@Order(-10)
然而并没有用。
在http://blog.csdn.net/catoop/article/details/50575038 的回复中看到问题所在
如果我没猜错的话,你用的是SpringMVC。你仔细DEBUG一下,你是不是 aop:aspectj-autoproxy 和 <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> 都配置了。
aop:aspectj-autoproxy 实际上使用的是 AnnotationAwareAspectJAutoProxyCreator ,导致同一个类被代理了2次。而 DefaultAdvisorAutoProxyCreator 在前,所以会出现开启事务在切换数据源之前。解决这个问题就可以了。
原来只是之前集成shiro时候会配置DefaultAdvisorAutoProxyCreator,造成二次代理。
@Bean public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator(); daap.setProxyTargetClass(true); return daap; }
把shiro中该配置删除即可。。。