将流作为参数传递给作业
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) 在 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 相邻时才有效。
有没有办法在通过 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.
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 相邻时才有效。