来自不同主机的并发线程的锁定和检索策略

时间:2017-12-17 21:19:16

标签: java multithreading spring-boot spring-data-jpa

方案: 两个独立的主机运行一个弹簧批量应用程序,其中一个cron设置为每5分钟触发一次。 它从数据库中读取查询 - “让我记录在哪里”running = false“

  • 将第一个记录锁定为“running = true”,然后继续对该记录执行更多操作。 同时,如果host2线程尝试从DB读取记录,则它不应该读取第一条记录,因为它被标记为由host1线程运行。但就我而言,它不断获得第一张唱片,并继续继续拍摄。

我尝试过使用PESSIMISTIC_WRITE,但似乎没有为我做任何事情。试过OPTIMISTIC_FORCE_INCREMENT,在这种情况下我得到了OptimisticLockingException。但是,在我的代码中,我执行以下操作

while (true) {
        try{
            List<Event> events = eventRepo.findEvents(true);

            for (Event event : events) {
                 execute(event);

            }
            return events.size();

        }catch(Exception e){
            log.debug("Exception found");
            continue;
        }
    }

我在这里的假设是,它第一次遇到乐观锁定的感知时会尝试在“findEvents”中重新运行查询。但是,我看到它进入该方法并立即尝试更新。在host2首次尝试后,日志中未显示任何选择状态。

0 个答案:

没有答案