我们的代码中有以下方法,该方法具有 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)?
最佳答案
事务和同步是两个不同的东西:
TX(交易)意味着您的代码不会看到与它一起运行的其他 TX 的影响(在某种程度上......),但不会阻止其他 TX 运行。例如,您可以尝试从 2 个 TX 更改同一数据库行。一个(第一个提交的)将成功,另一个将失败。
同步可以防止多个线程同时执行您的方法(在类的同一个实例上。您的类是单例吗?)。它提供了更强大的隔离
您需要决定需要哪两个
关于java - Spring中的同步事务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427021/