1、异常信息
org.springframework.transaction.TransactionTimedOutException: Transaction timed out: deadline was Tue Jul 23 18:06:32 CST 2019...
2、示例代码
@Service
public class UserServiceImpl implements UserService{
// 加载mapper
@Autowired
private UserMapper usermapper;
@Transactional(propagation=Propagation.REQUIRED,timeout=5) // 启用事务管理
public void myTransaction(User addUser, User updateuser) {
System.out.println("---- UserServiceImpl myTrasaction方法开始 ");
usermapper.add(addUser);
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
usermapper.update(updateuser);
System.out.println("---- UserServiceImpl myTrasaction方法结束 ");
}
}
/**
* 单元测试代码
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-transaction-annotation.xml")
public class TestTransaction {
@Autowired
private UserService userService;
@Test
public void test1(){
User addUser = new User("*fan","吴亦凡","123456789",1,new Date(),"13688889999","西安市长安区成府路207号",1,1,new Date(),null,null);
User updateuser = new User();
updateuser.setId(81);
updateuser.setUserCode("dzq");
updateuser.setUserName("邓紫棋");
userService.myTrasaction(addUser, updateuser);
}
}
3、错误原因
事务超时
@Transactional(propagation=Propagation.REQUIRED,timeout=5) 指定事务的运行时间是5秒,而myTransaction中线程休眠时间就有7秒,所以事务的运行时间不够,因此报错。
4、解决方法
可以设置timeout的值更大,或者可以不设置,使用默认值(timeout的默认值是none)
注意:如果事务直接提交,没有报错,可能就是你的jar包版本的问题。
我的版本:
myabtis 3.4.5
myabtis-spring 1.3.0
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。