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

本文介绍了Spring框架中@Transactional注解的timeout属性,该属性用于设置事务超时时间。通过示例代码展示了当业务执行时间超过设定的5秒超时时,事务会回滚并抛出TransactionTimedOutException异常。同时提到了MyBatis与Spring整合时可能出现的问题,如版本不匹配可能导致事务未按预期超时回滚,并提供了作者使用的MyBatis和mybatis-spring版本信息。文章鼓励读者分享更多相关经验和解决方案。

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、运行结果

 

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

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

        提示事务报错。

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

我的版本:

        mybatis 3.4.5

        mybatis-spring 1.3.0

 

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

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

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值