Spring中的同步事务方法

时间:2015-04-03 06:03:11

标签: java spring spring-mvc synchronization synchronized

我们的代码中有以下方法,它具有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是否为此提供了任何解决方案,还是应该从调用此方法的块同步块?

2 个答案:

答案 0 :(得分:2)

事务和同步是两回事:

  1. TX(交易)意味着您的代码不会看到其他TX运行的影响(直到某个点......),但不会阻止其他TX运行。例如,您可以尝试从2个TX中更改相同的数据库行。一个(第一个提交)将成功,另一个将失败。

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

  3. 你需要决定你需要哪两个

答案 1 :(得分:0)

代替那个make" getNextIdUSingSequnence"方法同步。 Transactional annotaion将处理addValueToDb方法。