一、Transactional注解作用在修饰符为非public的方法,@Transactional注解不起作用。
@Service
public class ComeServiceImpl implements ComeService {
@Autowired
UserMapper userMapper;
@Override
@Transactional
int 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 {
@Autowired
UserMapper userMapper;
@Override
public int A() {
User user1 = new User("qitian", 18);
userMapper.saveUser(user1);
this.B();
return 0;
}
@Override
@Transactional
public int B() {
User user2 = new User("dasheng", 25);
userMapper.saveUser(user2);
int i = 1 / 0;
return 0;
}
}