当从控制器启动的作业失败时,如何防止弹簧批处理关闭应用程序?

Posted

技术标签:

【中文标题】当从控制器启动的作业失败时,如何防止弹簧批处理关闭应用程序?【英文标题】:How to prevent spring batch to shutdown the application when a job launched from a controller fails? 【发布时间】:2019-07-16 19:18:57 【问题描述】:

我有弹簧批处理作业,我使用以下代码从控制器同步启动:

SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository.getObject());
jobLauncher.setTaskExecutor(new SyncTaskExecutor());
jobLauncher.run(convertFileJob, new JobParametersBuilder().addDate("date", new Date()).toJobParameters());

只要作业失败,整个应用程序就会关闭。

INFO 7 --- [Thread-22] o.s.i.endpoint.EventDrivenConsumer       : Removing logging-channel-adapter:_org.springframework.integration.errorLogger as a subscriber to the 'errorChannel' channel
INFO 7 --- [Thread-22] o.s.i.channel.PublishSubscribeChannel    : Channel 'application.errorChannel' has 0 subscriber(s).
INFO 7 --- [Thread-22] o.s.i.endpoint.EventDrivenConsumer       : stopped _org.springframework.integration.errorLogger
INFO 7 --- [Thread-22] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'taskScheduler'
INFO 7 --- [Thread-22] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
INFO 7 --- [Thread-22] o.e.jetty.server.AbstractConnector       : Stopped ServerConnector@29be997fHTTP/1.1,[http/1.1]0.0.0.0:8080
INFO 7 --- [Thread-22] org.eclipse.jetty.server.session         : node0 Stopped scavenging
INFO 7 --- [Thread-22] o.e.j.s.h.ContextHandler.application     : Destroying Spring FrameworkServlet 'dispatcherServlet'
INFO 7 --- [Thread-22] o.e.jetty.server.handler.ContextHandler  : Stopped o.s.b.w.e.j.JettyEmbeddedWebAppContext@3ab6678bapplication,/,[file:///tmp/jetty-docbase.3907062630090555365.8080/],UNAVAILABLE

如何防止这种行为?

谢谢!

【问题讨论】:

当工作成功时一切正常吗? 是的,一切正常,我可以继续点击控制器 【参考方案1】:

这是我的错误,我运行了调试器,发现在我们正在使用的库中调用了 System.exit(-1)

【讨论】:

以上是关于当从控制器启动的作业失败时,如何防止弹簧批处理关闭应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止执行批处理文件后自动关闭控制台

春季批处理:如果作业在最后 xx 分钟内失败,则向 grafana 和 prometheus 发出警报

当执行器处于活动状态时,我应该使用哪个注释来防止弹簧引导保护我的控制器

当执行器处于活动状态时,我应该使用哪个注释来防止弹簧引导保护我的控制器

Windows 2008 服务器任务调度程序不运行 .bat 批处理作业 [关闭]

如何使用弹簧批处理集成从远程服务器(主服务器)在工作服务器的多个节点上运行/执行作业?