Передача потока на работу в качестве параметра
Есть ли способ передать поток при запуске задания через Launcher, что-то похожее на передачу jobParameters?
У меня есть отдельный сервис для получения файла, а затем я хочу запустить пакетное задание для его загрузки.
Сценарий кода:
Рассмотрим этот образец. Здесь задание определено, но фактический модуль запуска находится в зависимости ниже.
Итак, рассмотрим в примере, я добавляю контроллер, который читает входной файл пользователя, а затем запускает образец-задание, определенное в примере, который запускается из- под joblauncher.run.
Я думал передать этот поток файлов непосредственно читателю задания, а не записать его на внешний диск и прочитать в setSeResource программы Reader
1 ответ
Посмотрев пример кода, который вы предоставили, я думаю, вы могли бы сделать что-то вроде этого:
1) Объявите статический HashMap в SimpleJobConfiguration
учебный класс.
public static Map<String, Object> customStorage = new HashMap<String, Object>();
2) Заполните эту карту с вашего сервиса
SimpleJobConfiguration.customStorage.put("key", yourStream);
3) Используйте эту статическую карту в setResource
метод вашего ItemReader
(как сказано в вашем предыдущем вопросе)
@Override
public void setResource(Resource resource) {
// Get your stream from the static map
Byte[] stream = (Byte[]) SimpleJobConfiguration.customStorage.get("key");
// Convert byte array to input stream
InputStream is = new ByteArrayInputStream(stream);
// Create springbatch input stream resource
InputStreamResource res = new InputStreamResource(is);
// Set resource
super.setResource(res);
}
Это решение будет работать, только если ваш сервис находится рядом с вашим jobLauncher.