关于事务处理的问题
对于业务层的方法除查询的以外,都要封装成事务,而事务并不是对所有异常都回滚操作的(这点我是在后续课程校园商铺看到的),这里为什么不需要使用try-catch块包裹,进而出现任何异常时都要在catch中
throw new RuntimeExcepetion()确保回滚呢?
正在回答 回答被采纳积分+1
同学你好,1、如果配置了transationManager,而且做了声明式事务配置,就能确保数据库访问层所有操作异常的回滚,而不必区分异常的类型,对吗?
事务并不是对所有异常都回滚操作的-->可以这样理解:当出现运行时异常,也就是在执行sql语句的操作的过程中出现问题,就会对当前内容进行回滚。所以这里的异常其实就是运行时异常RuntimeExcepetion,jvm可以捕获到的异常。
2、如果添加了事务管理的业务方法中,除了数据库访问层面的逻辑外,还有其他的业务逻辑,而且也有可能出现异常,此时如何确保事务的原子性?
这里同学的理解有一些问题,事务本身就是为了保证数据库数据的一致性而产生的,如果不是操作数据库,发生了异常也对数据库没有什么实质性的影响。
综上所述,事务的触发在配置了事务的方法中,运行时抛出了异常时,触发对应事务,将之前的操作进行回滚。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
同学你好,1、这里不添加try-catch是因为在biz中配置了事务管理器transationManager,对所有的方法实现了对应的事务管理:
事务触发的机制是在配置了事务的方法中抛出了异常时,将之前的操作进行回滚。比如:一次性需要向数据库中插入10条记录,在执行到第5条时报错了,抛出了异常。如果不配置事务在数据库中会产生4条脏数据,配置了事务抛出异常时会将之前的插入操作进行回滚。这样数据库中就不会产生脏数据了。
而propagation="REQUIRED" 的意思其实就是新建一个事务,我们要让它必须有事物。
2、Spring并不直接管理事务,而是提供了多种事务管理器,它们将事务管理的职责委托给持久化机制所提供的平台相关的事务实现。所以在当前项目里,直接配置事务管理器transationManager就可以了实现对应异常的事务管理。这里我们只要会用,而不用关心它的底层是如何实现的。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星