gpt4 book ai didi

java - 我想在一个函数中管理多个事务

转载 作者:行者123 更新时间:2023-11-30 10:14:03 27 4
gpt4 key购买 nike

我正在寻找一种机制来使用 Spring Boot 管理多个事务。这是代码:

class Controller {
@Autowired
Service service;

class Service {
@ Transactional
public void execute () {
// 1. select process using Repository
// 2. Update process using Repository
// 3. select process using Repository

如果第3步出现异常,需要回滚第2步的更新。到目前为止,我一直在处理一个数据库,所以它在上面没有问题。但是,不同的数据库用于选择和更新。 (数据源不同)对于每个DataSource,可以通过拆分的方式进行功能处理,但是那样的话对现有逻辑的修改会比较大。上面说了,有没有办法让Spring管理事务,同时用execute做所有的处理?

目前正在研究是否可以通过下面的方法实现,如果有更聪明的方法,不吝赐教。1.用自己的注解打开多个Connection(@Transactional2)2.Interceptor发现Repository的save*函数已经执行,切换DataSource

谢谢

最佳答案

在提供的示例中,您需要回滚的唯一事务是链接到更新语句的事务。在这种情况下,将 execute 方法标记为 @transactional 就足够了,确保您指定事务链接到 datasource 你正在更新:

class Service {

@ Transactional("updating-datasource")
public void execute () {
// 1. select process using Repository
// 2. Update process using Repository
// 3. select process using Repository

由于选择而发生的任何异常都会将此事务标记为rollback-only 并且更新将被回滚。

关于java - 我想在一个函数中管理多个事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51050916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com