Spring batch spring批处理何时关闭输入流?
这是在使用spring batch 3.0.8的背景下进行的。我创建了一个作业,其中一些步骤是使用SpringFlatFileItemReader从csv文件中读取,该文件由MultiResourceItemReader包装。我想知道spring是否在中读取文件后自动关闭输入流,或者这是我需要显式执行的操作?如果我需要关闭它,那么在哪里关闭它有什么建议 我问这个问题的原因是,我们注意到MultiResourceItemReader在完成当前步骤并进入下一步时没有关闭输入流,这对我们来说是一个大问题,因为我们正在读取1000多个文件,将来还会读取更多 我想知道spring是否在中读取文件后自动关闭输入流,或者这是我需要显式执行的操作Spring batch spring批处理何时关闭输入流?,spring-batch,Spring Batch,这是在使用spring batch 3.0.8的背景下进行的。我创建了一个作业,其中一些步骤是使用SpringFlatFileItemReader从csv文件中读取,该文件由MultiResourceItemReader包装。我想知道spring是否在中读取文件后自动关闭输入流,或者这是我需要显式执行的操作?如果我需要关闭它,那么在哪里关闭它有什么建议 我问这个问题的原因是,我们注意到MultiResourceItemReader在完成当前步骤并进入下一步时没有关闭输入流,这对我们来说是一个大问
是的,Spring Batch将在步骤完成后自动关闭资源。您不需要调用
close
方法,因为这是面向块的步骤中读取器生命周期的一部分。MultiResourceItemReader
委托,并且没有close
方法。委托有一个close方法。完成资源
时,将调用代理的关闭
方法
所以,;如果资源
的实现具有关闭
方法,则您可能必须在代理上实现关闭
方法,或者重写,以调用当前资源
上的关闭
方法(在关闭
上调用刚刚完成的资源
方法)
我不认为这就是资源
的用途。我认为它更像是输入流
或文件
或类似文件的“供应商”
因此,如果您愿意,我个人最喜欢的模式是,我在委托打开方法中为输入流分配了一个字段,它向当前资源请求输入流并分配,然后在关闭方法中,我对分配的输入流调用close
Spring批处理无法真正知道是否需要关闭来自资源的InputStream
,以及何时关闭
有些插件实现是这样工作的,有些第三方库提供读者。还有我所有的读者。
对我来说,资源
是一个供应商,它可以(在某些情况下)被反复调用,每次提供相同的或新的输入流
所以,;在您使用MultiResourceItemReader
类的情况下:您可能必须关闭在代理读取器中获得的任何输入流,在代理读取器的close
方法中,该方法从MultiResourceItemReader
pre-resource调用,并且在步骤结束时,当Spring批处理在MultiResourceItemReader
上调用close
时作为最终方法调用