Spring Cloud Data Flow 接入监控后批处理任务无法正常结束该如何处理
出现该问题的核心原因是 spring-boot-starter-actuator 引入了Web相关依赖,Spring Boot会自动识别为Web应用模式启动,进程不会在批处理执行完成后主动退出,和SCDF批处理任务的一次性运行特性冲突。
你可以根据实际场景选择以下任意一种方案解决:
禁用Web应用上下文(最推荐,无额外开发成本)
直接通过配置强制关闭Web环境,不会影响指标的采集和上报到SCDF,批处理执行完成后应用会自动退出:
在application.properties或application.yml中添加配置:spring.main.web-application-type=none开启Spring Cloud Task自动关闭上下文配置
如果你需要保留Actuator的Web端点做调试或其他定制操作,可以开启Spring Cloud Task自带的自动关闭配置,任务执行完成后会主动销毁Spring上下文:
配置文件中添加:spring.cloud.task.closecontext-enabled=true注意:该配置在Spring Cloud Task 2.0+ 版本均支持,低版本需先确认配置项兼容性。
代码主动监听任务结束关闭上下文
如果前两种配置不满足定制化需求,可以通过代码监听批处理任务结束事件,自定义关闭逻辑,比如预留时间保证指标完全上报后再关闭应用:@Component public class JobCompletionListener implements ApplicationListener<JobExecutionEvent> { @Override public void onApplicationEvent(JobExecutionEvent event) { if (event.getJobExecution().getStatus().isCompleted()) { // 自定义延迟5秒,保证指标上报完成 new Thread(() -> { try { Thread.sleep(5000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } ((ConfigurableApplicationContext) event.getApplicationContext()).close(); }).start(); } } }
内容的提问来源于stack exchange,提问作者Tomas Lukac
相关产品推荐
相关产品推荐

