Spring 批处理作业使用递增的参数启动相同的作业

Spring batch job launching same job with incremented parameters

我想逐级处理一棵大树。作业 1 将具有参数 1,作业 2 将获得参数 2,等等...每个作业调用下一个作业,同时仍有一个级别要处理。

我有一个在其中处理数据的 tasklet,然后在里面我尝试启动下一个作业,但出现异常 existing transaction detected in jobrepository

虽然不确定,但我知道从另一个作业的执行函数启动作业不是一个好主意。

我切换到添加 JobExecutionListener 并在 afterJob() 方法中启动下一个级别,允许我使用 ExecutionContext 提取参数并将它们递增到下一个工作。

我现在面临的问题是:

  1. BatchConfig 在配置中声明作业
  2. 启动第一个作业的服务通过@Resource
  3. 导入作业
  4. Listener 添加在 BatchConfig
  5. 侦听器必须 link 服务才能启动作业
  6. 如何注入服务以在侦听器中启动作业?它不是一个 bean,通过构造函数传递它会导致循环依赖。

我想我的设计有误,但我不知道如何正确地做到这一点。

嵌套作业会导致问题并使故障排除更加困难。

您可以在正在处理关卡的作业上添加 JobExecutionListener,而不是从另一个作业启动作业。

然后在afterJob(JobExecution jobExecution)回调中,您可以:

  • 检查作业的 ExitStatus
  • 运行下一个工作

这需要一些退出条件,否则你将永远循环下去,你将需要告诉下一个作业处理下一个级别。这些都可以通过多种方式实现:

这两种解决方案都允许您通过 ExecutionContext

传递参数