public void testInteralCall() throws Exception { testSuccess(); throw new Exception("事务不生效:类内部访问"); } 这里testInteralCall() 没有标注 @Transactional,我们再看一下测试用例: public static void main(String[] args) throws Exception { ApplicationContext applicationContext = new ClassPathXmlAp...
这里的 @Transactional 没有设置 rollbackFor = Exception.class 属性: @Transactional public void testExceptionNotMatch() throws Exception { Integer id = 1; MyUser user = query(id); System.out.println("原记录:" + user); update(id); throw new Exception("事务不生效:异常不匹配"); } 1. 2....
异常不匹配:@Transactional 未设置 rollbackFor 属性,方法返回 Exception 等异常; 多线程:主线程和子线程的调用,线程抛出异常。 Case 1: 类内部访问 我们在类 UserController 中新增一个方法 testInteralCall(): public void testInteralCall() throws Exception { testSuccess(); throw new Exception("事务不生效:...
@Transactional(rollbackFor = Exception.class)publicvoidwrongTryCatch(){try{ UserRegInfo userRegInfo =newUserRegInfo(); userRegInfo.setUserName("wrongRollbackFor"); userRegInfoRepository.save(userRegInfo);// ...// 由于某种原因抛出了异常thrownewIOException("throw io exception for check rollback"...
thrownewOutOfMemoryError(); } 实验五 加上rollbackFor = Exception.class,抛出OutOfMemoryError,正常回滚,说明rollbackFor = Exception.class不会覆盖Error的回滚 @Transactional(rollbackFor = Exception.class) publicvoidsave(){ StudentDOstudentDO=newStudentDO(); ...
insertBatch(userRoles); throw new Exception("发生异常咯"); } 这里#addUser()使用@transactional,但没有设置rollbackFor属性,且#addUserRole()抛出的异常是exception,不是RuntimeException,这样事务也失效了,因为默认情况下,出现 RuntimeException(非受检异常)或 Error 的时候,Spring才会回滚事务 从上面3.2小节的...
从finallyThrowException方法执行结果可以看出方法执行时的异常被丢失了 最后再来看一个小例子 1 public static void finallyWork(){ 2 int count = 0; 3 while(true){ 4 try{ 5 if(count++ == 0){ 6 throw new Exception("my error"); 7 } ...
异步虽然抛出了,但是抛出的是非RuntimeException类型的异常,依旧不会生效。@Transactionalpublic void updateStudent() throws MyException{userMapper.updateStudentA();try {int i = 1 / 0;studentMapper.updateStudentB();} catch (Exception e) {throw new MyException();}} 如果指定了回滚异常类型为Exception,...
throw new RuntimeException("发生异常咯"); } 在执行#addUser()方法时,可能会观察到事务控制失效的情况,即使出现异常,事务未能正确回滚,导致用户和角色绑定的数据仍然被成功插入。 在这里,我提供了一个关于@Transactional生效的原则,即必须通过代理过的类从外部调用目标方法才能使事务生效。
thrownewRuntimeException("testB"); } MANDATORY MANDATORY 传播特性简单来说就是只能被开启事务的上层方法调用,例如 testMerge 方法未开启事务调用 testB 方法,那么将抛出异常;testMerge 开启事务调用 testB 方法,则加入当前事务。 @Component @RequiredArgsConstructor ...