Spring 批处理:如何在 运行 时间动态更改作业的固定延迟

Spring batch: How to change the fixed delay of a job dynamically at run time

我的要求:

我有一个 spring 批处理作业,固定延迟为 5 秒。所以我的工作将每 5 秒轮询一次 Web 服务,并根据响应(当我获得 200 ok 状态时的情况)我需要将当前工作置于 睡眠 30 秒 之后它必须每 5 秒

恢复一次轮询 Web 服务

有什么方法可以在 运行 时间内动态配置这个吗??我需要更改 Reader 部分 .

中的固定延迟 属性

我的示例 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. 注册 Trigger bean 并在每次延迟时更新它。 您还可以查看 CompoundTrigger 来简化您的逻辑。

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

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