java - 如何在流式传输时重命名放置在远程位置的文件
问题描述
我想在从远程目录流式传输文件时向文件添加一些临时后缀。
我正在使用 spring 集成 dsl 从远程目录流式传输文件,并且我想确保一个文件一次被单个应用程序读取。所以我正在考虑在文件流式传输时向文件添加一些临时前缀。我正在使用出站网关来获取数据。
任何指针都会非常有帮助。目前我在阅读之前和阅读之后重命名文件,我真的不想这样做。
解决方案
考虑使用文件锁定,而不是重命名。这是13.2 Reading Files
spring-integration文档中的相关部分:
当多个进程从同一个目录读取时,可能需要锁定文件以防止它们被同时拾取。为此,您可以使用 FileLocker。有一个开箱即用的基于 java.nio 的实现,但也可以实现您自己的锁定方案。nio locker可以如下注入:
<int-file:inbound-channel-adapter id="filesIn"
directory="file:${input.directory}" prevent-duplicates="true">
<int-file:nio-locker/>
</int-file:inbound-channel-adapter>
您可以像这样配置的自定义储物柜:
<int-file:inbound-channel-adapter id="filesIn"
directory="file:${input.directory}" prevent-duplicates="true">
<int-file:locker ref="customLocker"/>
</int-file:inbound-channel-adapter>
【注意】当文件入站适配器配置了locker时,它会在文件被允许接收之前负责获取锁。它不会承担解锁文件的责任。如果您已经处理了文件并保持锁在您身边,那么您就有内存泄漏。如果这对您来说是个问题,您应该在适当的时候自己调用 FileLocker.unlock(File file)。
有关更多信息,请参阅Interface FileLocker和Class NioFileLocker的文档。
推荐阅读
- amazon-web-services - 对 S3* 和 *S3-Glacier 服务使用 *storage-class 'Glacier' 感到困惑
- python - 如何在 Google Colab 上的 Jupyter 笔记本中导入自定义 Python 包和模块?
- r - 创建多列分面函数
- android - 如何使我的底部工作表模式可滚动?
- android - 如果没有上传整个数据,有没有办法删除 Firebase-Storage 数据?
- java - 程序关闭并再次运行后无法第二次写入文件。只保存第一次
- python - AWS Lambda、Python 和 Plotly:通过 plotly.offline.plot() 生成 SVG 似乎不起作用
- encryption - 将可选属性添加到 OpenSSL pkcs8 密钥
- php - PHP在网站上显示来自SQL表的数据
- docker - Docker - 套接字文件的卷映射是一种覆盖行为吗?