我们通常在项目中都是使用全局事务配置,这样我们就不必在每个业务类的方法上加 @Transactional 注解,只要代码抛出异常,就会自动回滚事务
但是我们有的时候需要事务回滚并不一定是代码发生了异常,而是我们对业务逻辑的判断需要回滚事务,这时候,我们需要手动抛出运行时异常,例如:
/**
* before
*/
if (null == obj) {
// 手动抛异常
throw new RuntimeException("对象为空,不能继续进行");
}
/**
* after
*/
当我们判断 obj 对象为空时,我们不能继续进行下面的业务逻辑了,而在这之前,我们已经对数据库做了操作,这时候,我们就需要手动抛出 RuntimeException(运行时异常),还可以自定义异常提示信息
注意:必须是 RuntimeException 或继承了 RuntimeException 的异常类才能回滚事务
我们在控制层(controller 层)对该异常进行捕获,并能拿到自定义异常信息,例如:
try {
return userInfoServi