Передача потока на работу в качестве параметра

Есть ли способ передать поток при запуске задания через 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.

Другие вопросы по тегам