Java 在tomcat中优雅地关闭spring批处理作业
我们在提供UI的同一个web应用程序中运行tomcat中的几个spring批处理作业。最近,我们添加了更多的工作,我们注意到,当我们修补应用程序时,一些工作可能会陷入启动或已启动状态。许多作业在启动前确保另一个作业未运行,因此这意味着在修补服务器后,一些作业会中断,直到手动运行SQL以更新作业的状态,使其处于放弃或停止状态 我已经读到JobScope和StepScope作业与关闭不太协调 那篇文章建议不要使用JobScope或StepScope,但我忍不住认为这是一个已解决的问题,当应用程序退出时,人们必须做一些事情来防止这个问题 是否有一些处理此场景的最佳实践?你在应用程序中做什么Java 在tomcat中优雅地关闭spring批处理作业,java,spring,tomcat,spring-batch,Java,Spring,Tomcat,Spring Batch,我们在提供UI的同一个web应用程序中运行tomcat中的几个spring批处理作业。最近,我们添加了更多的工作,我们注意到,当我们修补应用程序时,一些工作可能会陷入启动或已启动状态。许多作业在启动前确保另一个作业未运行,因此这意味着在修补服务器后,一些作业会中断,直到手动运行SQL以更新作业的状态,使其处于放弃或停止状态 我已经读到JobScope和StepScope作业与关闭不太协调 那篇文章建议不要使用JobScope或StepScope,但我忍不住认为这是一个已解决的问题,当应用程序退出
我们正在使用SpringBatch版本3.0.3。发布版我将为您提供一个关于如何解决此场景的想法。不一定是spring批处理解决方案 每次我需要在应用程序中添加作业时,我都会这样做:
JobController
类来管理所有作业R
-运行、F
-完成、Q
-队列定义(您可以根据需要添加更多作业,如中止、取消等)(作业控制这些状态)JobController
,以通知您在实例化作业时是否已检查作业。将其设置为falseR
状态将每个作业更新为Q
,并增加它们的优先级,以便在服务器重新启动后首先执行。此检查位于该布尔属性的if
内,检查后将其设置为true希望能有所帮助。参考文章中的范围问题并不是停止工作的原因,那里的作业配置完全错误(在提供的示例中,范围未使用,也没有用处)。我感谢您抽出时间给我一个深思熟虑的答案。我可以实现我自己的解决方案,将所有状态设置为中止,如果它们设置为启动或在应用程序启动时启动,可以使用ServletContextListener或Spring中的某种启动侦听器。我希望有一个更优雅的解决方案。再次感谢您的评论。