使用spring poller在server1或server2中没有发生文件锁定

时间:2018-02-28 19:30:21

标签: spring-integration

我在我的应用程序中实现了弹出轮询器。我的应用程序运行在两个服务器我将txt / pdf / xlsx文件放在入站文件夹中。两个服务器指向相同的入站文件夹。一旦我放置了多个文件,如10-15个文件,两个服务器(两个JVM)都试图选择相同的文件,一个服务器处理文件并将文件从入站移动到进程中& 当其他服务器尝试相同并抛出FileNotFoundException 时。

有没有办法锁定文件,以便其他服务器可能无法读取同一个文件? (或)是否有任何其他解决方案来解决此问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

<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>