我们在一个项目中使用spring批处理和集成
我们使用spring集成来轮询和监视一个目录;当文件进入目录时,我们记录并移动到另一个目录
这就是我们监控的方式
@Bean
@InboundChannelAdapter(value = "fileChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<File> fileReadingMessageSource() {
FileReadingMessageSource sourceReader= new FileReadingMessageSource();
sourceReader.setDirectory(new File(INPUT_DIR));
sourceReader.setFilter(new SimplePatternFileListFilter(FILE_PATTERN));
return sourceReader;
}
一旦一个文件被轮询,我们将使用下面的函数移动一个diff temp目录
Files.move(source, destination, REPLACE_EXISTING);
在unix框中,文件被复制到复制之后,即使在我们处理之后,我们仍然可以看到io文件引用..这导致容器上打开的文件太多
我使用以下命令验证io连接的方法仍然存在:
lsof -u <userid> | grep <file_name>
目前,我们正在重新启动springboot应用程序,作为解决问题的一种方法。有什么想法/建议来解决这个问题吗?
1条答案
按热度按时间xxhby3vn1#
显然你有一些逻辑
fileChannel
打开一个InputStream
以便文件读取其内容。你看了之后就不关了。这个Files.move()
与打开/关闭文件资源无关。查看其javadocs。