起因
生产遇到一个异常情况,报运行时异常,缺还是修改了数据库数据。
经过
本地测试发现,在保存后,直接抛异常,并没有回滚数据。
用debug查看,发现已经打印了回滚日志了,但是数据库没生效。
由于我们是多数据源情况,感觉是spring的事务是否启动了,
1 | <tx:annotation-driven transaction-manager="transactionManagerWallet"/> |
xml中加入了,这个,发现,可以。但是,另外的数据源就出问题了。
发现问题
经过测试发现,在类上面加了@Transactional(transactionManager = “transactionManagerWallet”)
然后,方法上又加了@Transactional可能会导致 类上的 事务,被覆盖掉,导致,调到了其他的事务中
解决
后续方法上所有的@Transactional 都需要带对应的transactionManager,或者就不要写,如果类上有的话。这样就不会存在被覆盖的问题。