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

时间:2018-06-12 07:25:39

标签: spring-boot spring-batch schedule job-scheduling

我的要求:

我有一个弹簧批量作业,固定延迟为5秒。因此,我的工作将每5秒轮询一次Web服务,并根据响应(当我获得200 ok状态时的情况)我需要将当前作业置于睡眠30秒,之后它已经每 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 个答案:

答案 0 :(得分:0)

你可以在这里做很多方法:

  1. 注册sqlContext.setConf("hive.exec.dynamic.partition", "true") sqlContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict") sqlContext.sql("INSERT OVERWRITE TABLE <newtable> PARTITION (<partition_cols>) SELECT * FROM <oldtable>") bean并在每次延迟时更新它。 您还可以查看CompoundTrigger以简化逻辑。

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

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