【发布时间】:2020-12-01 15:08:02
【问题描述】:
我正在创建一个非常通用的 Spring Batch 应用程序,我从 YAML 文件中读取了很多配置,并动态创建作业并注册如下所示的作业,
jobRegistry.register(new ReferenceJobFactory(job));
所有这些都在配置类中完成。之后我启动如下所有工作,
jobs.forEach(j -> {
Job job;
try {
job = jobRegistry.getJob(j);
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
jobExecutions.add(jobExecution);
} catch (Exception e) {
e.printStackTrace();
}
});
到目前为止一切都很好,所有作业都已成功执行并完成,并且 JobRepository 也更新为“已完成”状态。在此之后,Spring Batch 应用程序继续运行并且不会退出。所有作业完成后,我不知道如何退出spring批处理应用程序。
我跟随其他一些线程在下面做,
ConfigurableApplicationContext run = SpringApplication.run(ChpCgmsReplicationApplication.class, args);
System.exit(SpringApplication.exit(run));
这可行,但问题是它不会等待所有作业,第一个作业完成后,应用程序退出。如何让这个等到所有作业完成然后退出。
【问题讨论】:
-
你试过使用属性 spring.main.web-application-type: none 吗?
-
是的,试过了,不行。
-
您是否尝试过 ApplicationContext 中的 close() 方法而不是退出。 SpringApplication.run(EanApplication.class, args).close();
-
close() 方法在作业开始之前关闭上下文。这也不起作用。
-
您是否有一个
ThreadPoolTaskExecutorbean(可能在您的作业启动器中使用)阻止您的应用退出?
标签: java spring spring-boot spring-batch