网站会员后台管理系统,品牌建设规划制定情况,沈阳男科医院哪家好收费合理,招聘网站代做Spring对待事物的实现有一个标签可以使用Transactional标签来实现事务的管理#xff0c;但是在使用的时候很多人不清楚实现的原理而使用了错误的使用方式#xff0c;导致日志里的确是打印了#xff0c;但是方法的确没有回滚。 我在遇到问题的时候发生了这样的问题#xff0… Spring对待事物的实现有一个标签可以使用Transactional标签来实现事务的管理但是在使用的时候很多人不清楚实现的原理而使用了错误的使用方式导致日志里的确是打印了但是方法的确没有回滚。 我在遇到问题的时候发生了这样的问题就先去了解下Java中导致程序出现的情况都有哪些 首先Java中的将会导致程序出错的各种情况统称为Throwable,它有两个重要的子类Exception和Error二者都是Java异常处理的重要类。 Error是程序已无法处理的异常与程序员编码无关是JDK内部出现的问题一般都是很严重的错误。 Exception是程序自身能处理的异常。 这些异常基本都是可以在编译器发现的但是除了Exception的一个子类叫做RunTimeException这个异常只有在运行的过程中才会出现我们的Try/catch语句就是为了捕获这种RunimeException并且处理它然而我们应该已经被处理的异常是不会再向上抛出的因为我们已经在这层解决好了所以一般我们会继承Exception类把遇到的异常抛出从而使得Spring的事务管理机制可以捕获到异常然后回滚。 所以说我们在使用Transactional进行实现事务的时候尽量不用Try/catch语句把异常向上抛出即可。 在别人的博客上我看到了一段代码可以让我很好的理解 这段代码因为已经处理了异常所以Spring的事务就捕获不到异常信息导致事务回滚失败 if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info(能力开通接口开户异常异常信息e); } } 下面的这种情况当一个方法出错抛出一个异常另一个方法就会回滚 使用throws关键字把try/catch捕获的异常再一次抛出去 if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info(能力开通接口开户异常异常信息e); throw new RuntimeException(); } } 使用它同样可以达到相同的效果 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 语句 手动回滚这样上层就无需去处理异常现在项目的做法 if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info(能力开通接口开户异常异常信息e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } 转载于:https://www.cnblogs.com/Shang-Jun/p/7635794.html