- 32
- 0
定义了一个service:UserService其中有个方法定义如下:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveException(User user){
userDao.save(user);
throw new RuntimeException("异常");
}
如果我在Controller层直接调用这个方法,是可以进行回滚的,但如果我把这个方法再包一层,如下:
public void saveInnerException() {
User user1 = new User();
user1.setName("李四");
this.saveException(user1);
}
saveInnerException还是在同一个service中,并且这个方法没有加事务,这个时候,如果Controller层调用saveInnerException方法,事务会进行提交,这个很奇怪,发生了异常,应该回滚才对。
我又进行了另外的测试,这次我重新定义了一个service:UserService2,里边有个非事务方法,如下:
public void test(){
User user = new User();
user.setName("李四");
userService.saveException(user);
}
如果Controller调用UserService2的test方法,这时事务就会回滚了。同样是多了一层调用,结果为什么不一样?
- 共 0 条
- 全部回答
-
.长街旧人 普通会员 1楼
在Spring中,如果一个方法在执行过程中抛出了一个runtimeException,但没有进行回滚,那么这个runtimeException将会一直存在,直到该方法被手动调用或者程序崩溃。这可能会导致程序的运行结果不可靠。
如果你需要在runtimeException被抛出时回滚,你可以使用
@Rethrow注解。这是一个特殊的注解,它可以被所有Spring容器的实例所支持。在你的方法中,你可以这样使用@Rethrow注解:java @Rethrow(Exception.class) public void handleException() { // 你的方法 }然后在你的配置文件中,你可以这样添加
@EnableRethrow注解:```xml
<!-- 添加Rethrow注解 --> <context:component-scan base-package="com.example.service"/> <context:annotation-driven/> <!-- 添加Rethrow注解 --> <bean class="org.springframework.stereotype.Component" ref="exceptionHandler"/> <bean class="org.springframework.context.annotation.Configuration" ref="exceptionHandlerConfig"/>```
在这个配置中,我们首先添加了
@EnableRethrow注解,这样Spring容器就会在runtimeException被抛出时自动回滚。然后,我们添加了
@Rethrow(Exception.class)注解,这样runtimeException就会被抛出时自动回滚。最后,我们添加了
@Component和@Configuration注解,这样Spring容器就会自动扫描com.example.service包,以及使用我们刚刚定义的exceptionHandler和exceptionHandlerConfig来处理异常。这样,当runtimeException被抛出时,Spring容器就会自动回滚,从而避免了异常的全局影响。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

