为什么任务在 Spring 云数据流中启动后没有被销毁?

Why tasks are not destroyed after launching in Spring Cloud Data Flow?

我创建了一些 Spring 批处理项目并使用 Spring 云数据流 (SCDF) 部署了这些作业。
在 SCDF 中启动任务(作业)后,它会创建 JVM 来执行任务(作业)。
然而,当任务完成时,JVM 并没有结束。它仍然存在。
当我启动作业 20 次时,它宣布

Cannot launch task A. The maximum concurrent task executions is at its limit [20]

还有关于我的工作的一些信息,工作的第一个日志以:

结尾
HikariPool-1 - Shutting down...

但是在我为 Spring 批处理项目使用下面的 属性 之后:

spring.cloud.task.singleInstanceEnabled=true

并通过使用 JobExecutionListenerSupport 使用 afterJob 方法 任务(作业)的日志以:

结尾
o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=remindJob]] completed with the following parameters: [{run.id=3}] and the following status: [COMPLETED] in 7s636ms
o.s.integration.leader.DefaultCandidate  : DefaultCandidate{role=EngineProcess, id=126} leadership has been revoked: LockContext{role=Process, id=126, isLeader=false}

我的 Spring 批处理作业有这些问题吗?

我的主要问题是,哪一个负责完全停止 JVM(任务)? Spring 云数据流部分或 Spring 批处理部分以及如何?

我认为当任务完成后,它应该被销毁(JVM停止)并且并发任务执行数不能达到限制。

我从 github 那里得到了设置 属性 spring.cloud.task.closecontext_enabled = true 的解决方案。但是我想深入理解没有spring.cloud.task.closecontext_enabled 上下文没有完全关闭的原因。将 属性 设置为 true 后。我的 Spring 批处理项目的日志显示警告:

main] o.s.b.f.support.DisposableBeanAdapter : Destroy method 'close' on bean with name 'getStudent' threw an exception: org.springframework.batch.item.ItemStreamException: Error while closing item reader

还有 ItemReader 代码:

@Bean
public JdbcCursorItemReader<Student> getStudent() {
    JdbcCursorItemReader <Student> reader = new JdbcCursorItemReader<>();
    reader.setDataSource(dataSource);
    reader.setSql(QueryConstants.getStudent);   
    reader.setRowMapper(new BeanPropertyRowMapper<>(Student.class)); 
    return reader;  
}