gpt4 book ai didi

java - Spring 中的同步事务方法

转载 作者:行者123 更新时间:2023-11-30 08:54:23 26 4
gpt4 key购买 nike

我们的代码中有以下方法,它具有 Transactional 注释并且是同步的。

@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
public synchronized void addValueToDB(String value, int parent) {
int nextId = getNextIDUsingSequence();
insertIntoDB(nextId, value);
updateLeft(parent);
updateRight(parent);
}

现在,由于 Transactional 注释在方法完成后提交到数据库中,所以对此方法的同步 对我来说似乎毫无用处? spring 是否为此提供了任何解决方案,或者我应该从调用此方法的地方同步块(synchronized block)?

最佳答案

事务和同步是两个不同的东西:

  1. 一个 TX(事务)意味着您的代码不会看到其他 TX 与其一起运行的效果(在某种程度上...),但不会阻止其他 TX 运行。例如,您可以尝试从 2 个 TX 更改相同的数据库行。一个(第一个提交)将成功,另一个将失败。

  2. 同步防止多个线程同时执行您的方法(在您类的同一个实例上。您的类是单例吗?)。它提供了更强大的隔离

你需要决定你需要哪两个

关于java - Spring 中的同步事务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427021/

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