Spring+myabtis整合声明式事务异常之org.springframework.transaction.TransactionTimedOutException: Transaction ..

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

 

此文希望可以帮助到大家。如有错误,请指教。                                                           

如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。 

上一篇:sqli-labs系列——第六关


下一篇:即时性能分析工具 Pyroscope