代码之家  ›  专栏  ›  技术社区  ›  Satheesh K

Spring batch:如何在运行时动态更改作业的固定延迟

  •  0
  • Satheesh K  · 技术社区  · 7 年前

    我的要求:

    我有一个spring批处理作业,固定延迟为5秒。因此,我的工作将每隔5秒轮询一个web服务,并根据我需要将当前工作置于 睡30秒 之后,它必须每天恢复对web服务的轮询 5秒

    有没有办法在运行时动态配置它??我需要更改中的固定延迟属性 读者部分 .

    我的TestJob配置示例:

    @Scheduled(fixedDelay = 5000L) // I need to change this property dynamically @ runtime 
        public void TestEventScheduler() {
            JobParameters jobParameters = new JobParametersBuilder().addLong("TestDataJobTime", System.currentTimeMillis()) 
                    .toJobParameters();
            try {
                jobLauncher.run(TestDataJob, jobParameters);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Community CDub    4 年前

    这里有很多方法可以做到:

    1. 登记 Trigger bean并在每次延迟时更新它。 你也可以调查 CompoundTrigger 简化你的逻辑。

    2. 而不是使用 @Scheduled 注释在批处理作业结束时,您可以有一个侦听器或输出通道,它将以特定的延迟再次将您的批处理作业添加到执行通道。

    您也可以查看类似问题的答案: Scheduling a job with Spring programmatically (with fixedRate set dynamically)