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 整合时的版本。
我的版本:
myabtis 3.4.5
myabtis-spring 1.3.0
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。