Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三个单独的dyno或系统的java同步_Java_Spring_Multithreading_Spring Boot_Concurrency - Fatal编程技术网

三个单独的dyno或系统的java同步

三个单独的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

我在akkeris应用程序中部署了JavaSpringBoot项目,它有4个dyno(将dyno视为单独的系统)。我有一个调度程序,每天只能选择一次。但因为我有4个dyno,它每天执行4次。 所以我添加了redis缓存并存储了日期。但有时4个请求同时出现,调度程序被调用4次。有时一次。 所以,不管dyno和她的请求是在同一时间出现,还是在几秒钟内出现差异,每天都应该只拾取一次

 @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的东西可以防止作业同时运行。