将流作为参数传递给作业

Passing stream to job as parameter

有没有办法在通过 job Launcher 启动作业时传递流,类似于传递 jobParameters?

我有一个单独的服务来获取文件,然后我想启动批处理作业来加载它。

代码场景:

考虑这个 sample. Here job is defined but actual launcher resides in the dependency underneath

所以在sample, I add a controller which read user's input file and then trigger the sample-job defined in sample which is run by joblauncher.run of underneath中考虑。

我想将此文件流直接传递给作业的 reader,而不是将其写入外部磁盘并在 Reader 的 setSeResource

中读取

看了您提供的示例代码后,我认为您可以这样做:

1) 在SimpleJobConfiguration class.

中声明一个静态HashMap
public static Map<String, Object> customStorage = new HashMap<String, Object>();

2) 从您的服务填充这张地图

SimpleJobConfiguration.customStorage.put("key", yourStream);

3) 在 ItemReadersetResource 方法中使用此静态映射(如上一个问题所述)

@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 相邻时才有效。