Spring batch 将流作为参数传递给作业

Spring batch 将流作为参数传递给作业,spring-batch,Spring Batch,在通过job Launcher(类似于传递jobParameters)启动作业时,是否有方法传递流 我有一个单独的获取文件的服务,然后我想启动批处理作业来加载它 代码场景: 想想这个。这里定义了作业,但实际的启动器驻留在依赖项中 这样,我添加了一个控制器,它读取用户的输入文件,然后触发定义在JoBaununChel.Run.O/*中运行的示例作业。p> 我正在考虑将此文件流直接传递到作业的读卡器,而不是将其写入外部光盘并在读卡器的setSeResource中读取。查看您提供的示例代码后,我认为您

在通过job Launcher(类似于传递jobParameters)启动作业时,是否有方法传递流

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

代码场景:

想想这个。这里定义了作业,但实际的启动器驻留在依赖项中

这样,我添加了一个控制器,它读取用户的输入文件,然后触发定义在JoBaununChel.Run.O/*中运行的示例作业。p>


我正在考虑将此文件流直接传递到作业的读卡器,而不是将其写入外部光盘并在读卡器的setSeResource中读取。查看您提供的示例代码后,我认为您可以执行以下操作:

1) 在
SimpleJobConfiguration
类中声明静态HashMap

public static Map<String, Object> customStorage = new HashMap<String, Object>();
3) 在
ItemReader
setResource
方法中使用此静态映射(如前一个问题所述)


只有当您的服务位于jobLauncher旁边时,此解决方案才会起作用。

找到以下建议:您可以添加启动作业的代码吗?我认为您可以简单地在代码中的某个地方使用静态映射,在服务和工作之间共享对象。@Thrax:我已经用代码场景编辑了最初的问题。
SimpleJobConfiguration.customStorage.put("key", yourStream);
@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);
}