Как вы говорите, независимо от JobContext или StepContext, их метод setTransientUserData(Object)
может передавать только одну переменную, и это нецелесообразно. Возможно, они просто не предназначены для сложного использования, я не уверен.
Однако вы можете определить свой собственный контекст для хранения переменных. Сделать это синглтоном, если вы хотите поделиться этим экземпляром для каждого класса:
import javax.inject.Named;
import javax.inject.Singleton;
@Named
@Singleton
public class MyContext {
private int rowCount;
private Map<String, String> params;
// or other things ...
}
Затем вы можете использовать настроенную контекстную класс MyContext
в вашем ItemWriter
, StepListener
через КДИ:
public class MyItemWriter implements ItemWriter {
@Inject
private MyContext myContext;
// then use it in your preferred method
}
Однако, как вы В предыдущем вопросе вы упомянули разделы о шагах, ваша работа, вероятно, работает в многопоточном режиме. Вы должны знать о проблеме параллелизма: вам нужно использовать правильную структуру данных для атрибутов в MyContext
.