Spring Boot 使用AOP切换多数据源时,被@Transactional注解的方法会抛异常

如题,根据 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中该配置删除即可。。。

转载于:https://my.oschina.net/yejunxi/blog/1031224

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值