将流作为参数传递给作业 [英] Passing stream to job as parameter
本文介绍了将流作为参数传递给作业的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有办法在通过作业启动器启动作业时传递流,类似于传递jobParameters?
我有一个单独的文件获取服务,然后我想启动批处理作业来加载它。
代码场景:
考虑这个sample。此处定义了作业,但实际启动器驻留在依赖项underneath中。
因此,在sample中,我添加了一个控制器,它读取用户的输入文件,然后触发sample中定义的示例作业,该示例作业由underneath的joblauncher.run运行。我在考虑将此文件流直接传递给作业的读取器,而不是将其写入外部磁盘并读取读取器的setSeResource
推荐答案
看过您提供的示例代码后,我认为您可以这样做:
1)在SimpleJobConfiguration
类中声明静电哈希图。
public static Map<String, Object> customStorage = new HashMap<String, Object>();
2)从您的服务填充此地图
SimpleJobConfiguration.customStorage.put("key", yourStream);
3)在ItemReader
的setResource
方法中使用此静电地图(如您上一个问题所述)
@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旁边时,此解决方案才有效。
这篇关于将流作为参数传递给作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文