我在我的应用程序中实现了spring poller。我的应用程序运行在两个服务器我将txt / pdf / xlsx文件放在入站文件夹中。两个服务器指向相同的入站文件夹。一旦我放置了多个文件,如10-15个文件,两个服务器(两个JVM)都试图选择相同的文件,一个服务器处理文件并将文件从入站移动到进程中,当其他服务器尝试相同时抛出FileNotFoundException。
有没有办法锁定文件,以便其他服务器可能无法读取同一个文件? (或)是否有任何其他解决方案来解决此问题。
提前致谢。
<int-file:inbound-channel-adapter>
可以提供<locker>
子元素。见Reference Manual:
当多个进程从同一目录读取时,可能需要锁定文件以防止它们被同时拾取。要做到这一点,你可以使用
FileLocker
。有一个基于java.nio
的实现开箱即用,但也可以实现自己的锁定方案。 nio储物柜可按如下方式注入
<int-file:inbound-channel-adapter id="filesIn"
directory="file:${input.directory}" prevent-duplicates="true">
<int-file:nio-locker/>
</int-file:inbound-channel-adapter>