Spring batch 在spring batch itemReader中读取流而不是文件
我得到一个csv文件作为一个webservice调用,需要修改。现在我把它保存在temp目录中,作为setResource提供给读者Spring batch 在spring batch itemReader中读取流而不是文件,spring-batch,Spring Batch,我得到一个csv文件作为一个webservice调用,需要修改。现在我把它保存在temp目录中,作为setResource提供给读者 有没有办法按原样提供流(字节[])而不是先保存文件?ItemReader的方法setResource将org.springframework.core.io.Resource作为参数。这个类有一些现成的实现,您可以在其中找到org.springframework.core.io.InputStreamResource。这个类的构造函数采用java.io.Input
有没有办法按原样提供流(字节[])而不是先保存文件?ItemReader的方法
setResource
将org.springframework.core.io.Resource
作为参数。这个类有一些现成的实现,您可以在其中找到org.springframework.core.io.InputStreamResource
。这个类的构造函数采用java.io.InputStream
,它可以通过java.io.ByteArrayInputStream
实现
因此,从技术上讲,您可以在ItemReader
中使用byte[]
参数
现在,关于如何真正做到这一点,这里有一些想法:
1) 创建自己的FlatFileItemReader
(因为CSV是一个平面文件),并使其实现StepExecutionListener
public class CustomFlatFileItemReader<T> extends FlatFileItemReader<T> implements StepExecutionListener {
}
3) 重写setResource
方法,将此流作为实际资源传递
@Override
public void setResource(Resource resource) {
// 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);
}
此外,如果您不想在ItemReader中调用Web服务,只需将字节数组存储在JobExecutionContext
中,并使用stepExecution.getJobExecution().getExecutionContext().get(“key”)在beforeStep
方法中获取它即可代码>在通过作业启动器启动作业时,是否有一种类似于传递作业参数的方法来传递流?我有一个单独的获取文件的服务,然后我想启动批处理作业来加载它。@explorer不幸的是,JobParameters
只能传递String
、Long
、Date
和Double
类型。根据这篇文章:,你要么使用外部存储(保存你的文件),要么声明一个可以访问它的bean。谢谢@Thrax。我也注意到了这一点,并且正在寻找一些看起来很棘手的工作。。。
@Override
public void setResource(Resource resource) {
// 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);
}