三个单独的dyno或系统的java同步
我在akkeris应用程序中部署了JavaSpringBoot项目,它有4个dyno(将dyno视为单独的系统)。我有一个调度程序,每天只能选择一次。但因为我有4个dyno,它每天执行4次。 所以我添加了redis缓存并存储了日期。但有时4个请求同时出现,调度程序被调用4次。有时一次。 所以,不管dyno和她的请求是在同一时间出现,还是在几秒钟内出现差异,每天都应该只拾取一次三个单独的dyno或系统的java同步,java,spring,multithreading,spring-boot,concurrency,Java,Spring,Multithreading,Spring Boot,Concurrency,我在akkeris应用程序中部署了JavaSpringBoot项目,它有4个dyno(将dyno视为单独的系统)。我有一个调度程序,每天只能选择一次。但因为我有4个dyno,它每天执行4次。 所以我添加了redis缓存并存储了日期。但有时4个请求同时出现,调度程序被调用4次。有时一次。 所以,不管dyno和她的请求是在同一时间出现,还是在几秒钟内出现差异,每天都应该只拾取一次 @Scheduled(zone = "${scheduler.zone}", cron = &qu
@Scheduled(zone = "${scheduler.zone}", cron = "${scheduler.cron.job}")
public void processScheduled() {
synchronized(this) {
LocalDate localDate = redisTemplate.getValue("DATE");
if (localDate == null || LocalDate.now().isAfter(localDate)) {
log.info("Entered process in SchedulerConfig");
redisTemplate.putValue("DATE", LocalDate.now());
schedulerService.processScheduled();
}
}
}
不要试图侵入它,使用一个实际支持这一点的调度解决方案。使用类似quartz的东西可以防止作业同时运行。