一、Transactional注解作用在修饰符为非public的方法,@Transactional注解不起作用。
@Service
public class ComeServiceImpl implements ComeService {@AutowiredUserMapper userMapper;@Override@Transactionalint saveUser() {User user = new User("qitian", 18);return userMapper.saveUser(user);}
}
二、 将异常信息使用try-catch 包裹,事务方法内部捕捉了异常,没有抛出新的异常,@Transactional 注解不起作用。
@Transactional(rollbackFor = Exception.class)public void import() throws Exception {try {//...} catch (Exception e) {StaticLog.error(e);//不抛出异常}}
三、同一个Service内方法调用,当@Transactional 注解作用在B方法上时,@Transactional 注解不起作用。方法A中的数据提交,方法B中数据提交,遇到异常没有回滚,代码如下。
@Service
@Slf4j
public class ComeServiceImpl implements ComeService {@AutowiredUserMapper userMapper;@Overridepublic int A() {User user1 = new User("qitian", 18);userMapper.saveUser(user1);this.B();return 0;}@Override@Transactionalpublic int B() {User user2 = new User("dasheng", 25);userMapper.saveUser(user2);int i = 1 / 0;return 0;}
}