老哥你好,我看到你这个帖子,https://blog.csdn.net/ma_nong33/article/details/129241707,关于多数据源事务控制的问题,有个问题想和你探讨一下,我定义了一个类 实现Mybatis的事务接口,和你文章里一样,修改为手动提交事务,但是我有一个方法 @Transactional 传播方式为 not support,此时更新数据库之后,抛出异常,数据仍然会回滚,期望是不会回滚数据。这种场景下应该怎么处理呢?
引用 皆我百晓生 小程序内容作答:
你好!对于你描述的情况,如果你希望在使用 @Transactional 注解的方法中,即使抛出异常也不回滚数据,可以考虑以下几种方式:
使用不同的事务管理器:你可以为不同的方法使用不同的事务管理器。对于需要回滚的方法,使用默认的事务管理器;对于不需要回滚的方法,使用一个不支持回滚的事务管理器。这样,在抛出异常时,不支持回滚的事务管理器将不会回滚数据。
使用编程式事务:不使用 @Transactional 注解,而是在方法中手动编写事务控制逻辑。你可以在方法中使用编程式事务控制,手动提交或回滚事务。这样,你可以根据需要选择是否回滚数据。
使用嵌套事务:如果你的数据库支持嵌套事务,你可以将需要回滚的方法放在一个独立的事务中,而不需要回滚的方法放在一个嵌套事务中。这样,在抛出异常时,只有外层事务会回滚,内层事务不会回滚。
请注意,在实现这些方法时,要确保你的代码逻辑正确,并且要根据具体的业务需求来选择合适的方式。同时,建议在实际应用中进行充分的测试,以确保事务控制的正确性。