如何避免一对一关系并发访问(可能是javasync、hibernate或jms问题)

问题描述 投票:0回答:1

在我的 spring-hibernate 应用程序中也具有 JMS,多个使用者同时访问为我们将对象记录到 MySQL 数据库提供持久性的方法之一。由于该方法的并发访问,我在其中编写的逻辑在某些情况下会失败。我分享以下逻辑:

// check the current sourceId whether is included or not in log table
List<MyLogObject> logs = logService.findBySourceId(currentSourceId); 

if(logs.size() == 0){
  logService.persist(currentLogObject);
}

如您所见,如果多个消费者同时访问此代码块,则日志大小应为他们返回 0,因此他们会两次或更多次持久保存同一个对象。

在 JMS 和多个消费者使用的情况下如何避免对象的多次持久化。

是否可以使用Java的

syncronized
功能来实现这一点?

spring hibernate jms
1个回答
1
投票

是的,我认为如果包含此日志记录方法的对象在许多线程之间共享,那么在这里拥有一个锁并在该锁上使用同步应该确实有效。

它应该像这样简单:

class YourClass{
    .....
Object monitor = new Object();

public void log(){

    synchronized(monitor){
    .....

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.