V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dufu
V2EX  ›  编程

springboot 并发调用存储过程

  •  
  •   dufu · 29 天前 · 746 次点击
    各位大佬,有可能在 springboot 框架下,并发调用存储过程,根据返回值进行 commit 或者 rollback 吗?
    比如:
    function x() {
    int i = 3;

    // 并行调用 3 次 sp1 的存储过程,返回值放到 retList 中
    retList = ConcurrentCallSP(i, "sp1");

    // 只要有一个返回值小于 50 就 rollback
    for each(ret in retList) {
    if(ret < 50) rollback;
    return;
    }

    commit;
    }
    3 条回复    2025-08-07 23:55:07 +08:00
    wysnxzm
        1
    wysnxzm  
       29 天前   ❤️ 1
    使用 CompletableFuture.anyOf()获取最快执行完成任务的结果进行判断,满足则 return 不满足则在剩余的任务中继续 CompletableFuture.anyOf()
    循环次数为任务的 size()即可不需要递归
    amy2
        2
    amy2  
       29 天前   ❤️ 1
    并发调用用的是一个数据库连接吗,不是的话就不是同一个事务了吧,没法整体提交或回滚
    dufu
        3
    dufu  
    OP
       27 天前
    场景 1:不同任务,共享同一个连接,需要将当前连接的当前事务进行传递,传递的过程需要等待,即任务 2 需要等待任务 1 执行完成后,将事务传递过来,任务 3 需要等任务执行完成后将事务传递过来,因此,和串行执行基本一样

    场景 2:开多个线程,每个线程有自己的连接和事务,因此会各自提交事务,线程 1 的回滚只会回滚线程 1 中的事务,因此也达不到统一 commit 或者 rollback 的效果。

    总结:目前没有得到更好的办法实现这个。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3205 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:34 · PVG 20:34 · LAX 05:34 · JFK 08:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.