首页 > 解决方案 > Spring批处理:如何在运行时动态更改作业的固定延迟

问题描述

我的要求:

我有一个固定延迟为 5 秒的春季批处理作业。所以我的工作将每 5 秒轮询一次 Web 服务,并根据响应(当我得到 200 ok status 的情况)我需要让当前工作休眠 30 秒,之后它必须恢复轮询 Web 服务5秒

有没有办法在运行时动态配置它?我需要更改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();
        }
    }

标签: spring-bootspring-batchschedulejob-scheduling

解决方案


您可以在这里执行多种方法:

  1. Trigger每次延迟注册bean 并更新它。您还可以查看CompoundTrigger以简化您的逻辑。

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

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


推荐阅读