1、如下代码会导致事务超时异常(org.springframework.transaction.TransactionTimedOutException: Transaction timed out)
@Override
@Transactional(timeout = 2)
public int insert(User user) {
try {
Thread.sleep(2000L);
userMapper.insert(user);
return 1;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
2、将sleep移到sql后面,事务正常执行
@Override
@Transactional(timeout = 2)
public int insert(User user) {
try {
userMapper.insert(user);
Thread.sleep(2000L);
return 1;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
3、去掉操作数据库的语句,方法返回正常
@Override
@Transactional(timeout = 2)
public int insert(User user) {
try {
Thread.sleep(3000L);
return 1;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
4、结论:spring事务的超时时间 = 事务中最后一条sql执行完毕的时间 - 事务开始时间。