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