【发布时间】:2021-04-22 00:06:00
【问题描述】:
我们正在我们的一个项目中使用 Spring Batch 和集成
我们使用 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 临时目录..我们正在使用 java.nio.file.File
Files.move(source, destination, REPLACE_EXISTING);
在文件被复制到复制后的 unix 框中,即使经过我们的处理,我们仍然看到 IO 文件引用 ..这导致容器上打开文件过多问题
我使用以下命令验证 IO 连接的方式仍然存在:
lsof -u <userid> | grep <file_name>
目前,我们正在重新启动 Spring Boot 应用程序以解决此问题。有什么想法/建议可以解决这个问题?
【问题讨论】:
-
你可以尝试关闭一些文件....
-
nio.File 包应该已经这样做了吧?
标签: spring spring-boot spring-integration java.nio.file