springboot 并发调用存储过程

57 天前
 dufu
各位大佬,有可能在 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;
}
921 次点击
所在节点    编程
3 条回复
wysnxzm
57 天前
使用 CompletableFuture.anyOf()获取最快执行完成任务的结果进行判断,满足则 return 不满足则在剩余的任务中继续 CompletableFuture.anyOf()
循环次数为任务的 size()即可不需要递归
amy2
57 天前
并发调用用的是一个数据库连接吗,不是的话就不是同一个事务了吧,没法整体提交或回滚
dufu
55 天前
场景 1:不同任务,共享同一个连接,需要将当前连接的当前事务进行传递,传递的过程需要等待,即任务 2 需要等待任务 1 执行完成后,将事务传递过来,任务 3 需要等任务执行完成后将事务传递过来,因此,和串行执行基本一样

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

总结:目前没有得到更好的办法实现这个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1150397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX