在大多数使用单测的情况下,我们都会继承BaseServiceTest,来进行相关事务启动。但BaseServiceTest又继承了AbstractTransactionalJUnit4SpringContextTests 这个是Spring测试事务处理并没有进行GGLIB代理,也就是说你所有的
AOP启动其实都是在AbstractTransactionalJUnit4SpringContextTests事务开启之后才进行拦截通知的,这样就导致
在进行数据源切换的时候,AbstractTransactionalJUnit4SpringContextTests会提前开启事务从而导致AOP上的拦截滞后从而报错。来看图:
从图可以看出在开启事务的时候当前数据源还是在使用的default数据源,没有切换。修正方法 如果继续使用Junit进行测试,那么去掉AbstractTransactionalJUnit4SpringContextTests的集成,单独使用一个基类来进行启动。
直接在你的具体测试类里进行继承实现:
这样就可以了