Spring双数据源@Transactional事务不回滚问题
同一个service内方法套用,如方法A->B->C,最外层方法A必须标注为@Transactional
双数据源下,需要事务的数据源必须标注为 @Primary,否则,必须在@Transactional中指定transactionManager
默认情况下,Spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。
那么什么是checked异常,什么是unchecked异常
java里面将派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常,其他继承自java.lang.Exception得异常统称为Checked Exception,如IOException、TimeoutException等
没办法的办法:手动回滚
try {
insertAll(record);
}catch (Exception e){
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw e;
}
- 已验证,controller中用try catch不影响事务,service中用try catch影响事务,配置@ControllerAdvice不影响事务
参考
spring@Transactional注解事务不回滚不起作用无效的问题处理 - 小奔的早晨 - 博客园
正文到此结束