2016-06-20 2 views
1

Мне нужно передать еще одну переменную между прослушивателем Step и Writer. используя StepCtx.setTransientUserData(), я могу передать только одну переменную.JSR 352: передать несколько переменных, используя контекст контекста/задания?

Итак, чтобы передать несколько переменных, я должен создать карту/класс и передать его или есть лучший способ?

ответ

1

Как вы говорите, независимо от 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.

0

setTransientUserData (Object) должно быть достаточным, объект строится по вашему желанию. Вы можете создать более сложный объект для хранения многих других объектов.

Смежные вопросы