spring 事务 失效,spring事务使用场景
如果使用mysql,1、事务最终依赖的数据库的执行引擎是innodb因为只有innoDB支持事务。
2、s事务原理是aop,所以处理办公室由bean中的Spring容器管理;New自己的对象肯定不行。
3、事务标记@Transactional必须在公共方法上进行注释。私有的、受保护的、默认的和最终修饰的方法或类,以及静态方法,事务将是无效的。
4、在同一个类中调用内部方法,该事务将无效。这被调用,下图中updateOrder上的事务将无效。您可以定义另一个服务,并调用服务中的updateOrder来生效。
5、多线程调用事务将无效。事务建立在同一个数据链路上,多个线程可能得到的连接不是同一个连接,所以事务会无效。下图中的DoOtherThing()抛出异常,无法使add回滚。
6、事务传播。当@Transactional被注释时,您可以指定传播参数,扩展其配置不支持事务。
传播。NOT_SUPPORTED,这种类型的传播功能不支持事务。如果有事务,将抛出异常。
目前,只有这三个传播特性会创建新的事务:nested、requires _ new和required。
7、遇到异常,如果是RuntimeException,就回滚;否则,它将不起作用,除非定义了@ transactional(roll back for=exception . class)。这种配置仅限于可抛出异常类及其子类。
8、自己吞下了这个异常,试着抓住它,自然他不会掷骰子。
9、,中的嵌套事务太多,导致回滚太多。我以为我会像下面这样回滚doOtherthing(),但是如果doOtherThing抛出异常,收到add,也会回滚。更好的方法是在roleService.doOtherThing()处捕获异常。
总结
本文到此为止。希望它能帮到你,也希望你能多关注更多的盛行它的内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。