Spring框架之@Transactional注解用法(三)之timeout属性的使用

1、业务逻辑层代码

@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  myTransaction方法开始 ");
		usermapper.add(addUser);
		try {
			Thread.sleep(7000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		usermapper.update(updateuser);
		
		System.out.println("---- UserServiceImpl  myTransaction方法结束 ");
	}

}

说明:

       @Transactional注解的tiemout属性表示设置事务超时时间。

       以上代码中 ,@Transactional(propagation=Propagation.REQUIRED,timeout=5) 。

       表示允许事务执行的时间是5秒,而业务方法myTransaction中,代码的执行时间一定大于5秒的。

 2、测试代码

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-transaction-annotation.xml")
public class TestTransactionAnnotation {
 	
	@Autowired
	private UserService userService;
	
	@Test
	public void test1(){
		User addUser = new User("dzq","邓紫棋","123456789",1,new Date(),"13688889999","西安市长安区成府路207号",1,1,new Date(),null,null);
		
		User updateuser = new User();
		updateuser.setId(85);
		updateuser.setUserCode("zzy");
		updateuser.setUserName("张震岳");
		
		userService.myTransaction(addUser, updateuser);
	}

}

3、运行结果

Spring框架之@Transactional注解用法(三)之timeout属性的使用

 

最终,由于事务超时,事务回滚。

运行的时候,由于事务超时,就会报错 TransactionTimedOutException:....

        提示事务报错。

如果事务超时了,但是却提交了,那就要检查你的myabtis版本和 mybatis-spring 整合时的版本。

我的版本:

        myabtis 3.4.5

        myabtis-spring 1.3.0

 

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

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

 

 

上一篇:<asp:FileUpload>控件获取不到文件名问题(已解决)


下一篇:springboot返回统一接口与统一异常处理