如何在 Spring 批处理侦听器中访问作业参数?

How do I access Job parameters in a Spring Batch Listener?

我正在与 ItemListenerSupport 一起为 ItemReadListener、ItemProcessListener 和 ItemWriteListener 做一些错误处理。我想在此实例中访问作业参数。我如何获取这些?我尝试 @BeforeStep 注入 StepExecution 和 Jobexecution,但均无效。

要获取作业参数的句柄,您可以为您的侦听器实现 StepExecutionListener Class 以使用覆盖的方法 beforeStep 和 afterStep

@Override
public void beforeStep(StepExecution stepExecution) {
    String name = (String) stepExecution.getJobExecution().getExecutionContext()
            .get("name");

}

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
    if (stepExecution.getStatus() == BatchStatus.COMPLETED) {
        return ExitStatus.COMPLETED;
    }
    return ExitStatus.FAILED;
}

您可以将侦听器声明为步作用域 bean 并在其中注入作业参数,例如:

@Bean
@StepScope
public ItemReadListener itemReadListener(final @Value("#{jobParameters['name']}") String name) {
    return new ItemListenerSupport() {
        @Override
        public void afterRead(Object item) {
            System.out.println("in listener, job param name=" + name);
            super.afterRead(item);
        }
    };
}