禁用 Spring Batch 作业

Posted

技术标签:

【中文标题】禁用 Spring Batch 作业【英文标题】:Disable Spring Batch Jobs 【发布时间】:2014-12-24 14:04:10 【问题描述】:

我想知道是否有办法以编程方式启用/禁用所有已定义的 spring-batch 作业?例如,当我部署我的应用程序时,数据库是空的,此时我的作业正在运行并引发异常。我想禁用这些作业,直到数据库中填充了一些数据(直到出现某些表)。这可能吗?

【问题讨论】:

这确实是一个编排问题。您的工作最初是如何启动的?无论是什么都需要延迟启动,直到出现适当的条件...... 嗨迈克尔,感谢您的回复。我的工作是使用 cron 触发器启动的。一个每分钟将产品导出到 SOLR(它只找到更改的产品),还有一个将所有产品导出到 SOLR,每天午夜触发一次。 我假设 cron-trigger 现在是在启动时创建的,这会导致您出现问题。您可能希望使用 Spring Integration 中的 Poller 之类的东西来轮询可以安全运行作业的条件,当条件发生时,然后以编程方式安排作业。 酷,我不知道Poller。这可能是一种选择。但是我认为让轮询器每分钟轮询一次数据库非常昂贵。我不想在数据库为空时运行作业。但是一旦数据库被初始化,我想让那些 cronjobs 一直运行。轮询器似乎会给我的数据库增加额外的压力。对我来说,真正的解决方案是在Job 中使用isRunnableisActive 方法,以便我可以覆盖它,并检查数据库(或Environment 属性)是否应该运行该作业。 所以您正在寻找的东西在 Spring XD 中是可用的。 Spring Batch 明确地避免了作业编排问题(这确实是),因为作业编排是 Spring XD 的核心。关于 isRunnable/isActive 标志的想法,如何设置?我假设它仍然是一个程序化的东西,它可以追溯到某个时候,你需要被通知数据在数据库中,这通常会回到某种轮询(除非加载系统会通知批处理系统) . 【参考方案1】:

你看过这个问题吗? How Spring Boot run batch jobs 您可以在启动时通过将spring.batch.job.enabled=false 添加到application.propertiesfile 来禁用该作业。 然后,您可以在初始化数据库时使用 JobLauncher 运行作业。

【讨论】:

以上是关于禁用 Spring Batch 作业的主要内容,如果未能解决你的问题,请参考以下文章

访问作业参数 Spring Batch

Spring Batch Framework - 自动创建批处理表

Spring Batch - 使用相同的作业参数重新运行作业

如何将 Spring Batch Cron 作业迁移到 Spring Cloud 任务

关于这个 Spring Batch @Scheduled() 注解以及如何手动启动 Spring Batch 作业的一些疑问?

Spring Batch作业未结束