如何在 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);
}
};
}
我正在与 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);
}
};
}