Spring Batch @BeforeContext не может выполнить
У меня есть ситуация в весенней партии, когда у меня есть несколько процессоров элементов, которые составляют процессор составных элементов. Мне нужно поделиться некоторыми данными контекста между двумя процессорами на одном этапе. Я нашел рабочее решение для доступа к контексту, показанному ниже. Тем не менее, есть альтернативное решение, которое кажется немного чище, но в нем используется @BeforeStepAnnotation, который никогда не вызывается. Если возможно, я хотел бы использовать второе решение. Мы очень ценим любые советы о том, как это сделать.
Это работает:
@Component
@StepScope
public class MyItemProcessor implements ItemProcessor<String,String> {
@Value(#{stepExecution});
private StepExecution stepExecution;
public String process(String s){
//Do things
Context context = new Context();
context.set("Hello Context");
ExecutionContext executionContext = stepExecution.getExecutionContext();
executionContext.put("Context", context);
}
}
Это не удается:
@Component
@StepScope
public class MyItemProcessor implements ItemProcessor<String,String> {
private ExecutionContext executionContext;
public String process(String s){
//Do things
Context context = new Context();
context.set("Hello Context");
executionContext.put("Context", context);
}
@BeforeStep
public getCurrentContext(StepExecution stepExecution){
executionContext = stepExecution.getExecutionContext();
}
}
1 ответ
Поскольку ваш обработчик элементов является частью композита, он не подвергается интроспекции @BeforeStep
аннотация и, следовательно, он не зарегистрирован как слушатель. Spring Batch будет анализировать только тот объект, который зарегистрирован как процессор (композит в вашем случае), а не весь граф объекта.
Чтобы это работало, вам необходимо зарегистрировать любой процессор составления в качестве слушателя. Следующие ссылки могут помочь: