禁用 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
中使用isRunnable
或isActive
方法,以便我可以覆盖它,并检查数据库(或Environment
属性)是否应该运行该作业。
所以您正在寻找的东西在 Spring XD 中是可用的。 Spring Batch 明确地避免了作业编排问题(这确实是),因为作业编排是 Spring XD 的核心。关于 isRunnable/isActive 标志的想法,如何设置?我假设它仍然是一个程序化的东西,它可以追溯到某个时候,你需要被通知数据在数据库中,这通常会回到某种轮询(除非加载系统会通知批处理系统) .
【参考方案1】:
你看过这个问题吗? How Spring Boot run batch jobs
您可以在启动时通过将spring.batch.job.enabled=false
添加到application.properties
file 来禁用该作业。
然后,您可以在初始化数据库时使用 JobLauncher 运行作业。
【讨论】:
以上是关于禁用 Spring Batch 作业的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch Framework - 自动创建批处理表
Spring Batch - 使用相同的作业参数重新运行作业
如何将 Spring Batch Cron 作业迁移到 Spring Cloud 任务
关于这个 Spring Batch @Scheduled() 注解以及如何手动启动 Spring Batch 作业的一些疑问?