在 Spring 集成中检测文件更改

Detect file changes in Spring Integration

用例:我想听一个文件目录,每次有人对文件进行更改,我希望它启动一个进程。

这是我目前的配置:

<int-file:inbound-channel-adapter directory="${dir}" auto-startup="${auto.startup}" prevent-duplicates="true" filter="inputfilefilter" channel=rulesChannel">
    <int:poller fixed-delay="${delay}" />
</int-file:inbound-channel-adapter>

其中inputFileFilter是自定义bean,rulesChannel是后面的处理。

inputFileFilter 采用文件数组和 returns 文件列表,按文件结尾排序。这好像拉不完,"prevent-duplicates"-check是在filter之后做的(即添加了文件,但是好像没有发到rulesChannel)。

无论如何,我的问题是我需要这整件事来获取文件更改,而不是新文件。主要是,它是一个不时更改的配置文件,我需要更新它以保持同步。

是的,这是一个糟糕的解决方案,但这不是我的决定,而且我似乎别无选择。

有什么好主意吗?

编辑:我尝试了 http://docs.spring.io/spring-integration/reference/html/files.html#_watchservicedirectoryscanner 看看我是否可以复制 class 并将其与 StandardWatchEventKinds.ENTRY_MODIFY 一起使用,但它似乎没有帮助。

基本上,如果我有一个很好的方法来"start a thread and keep it running",我也可以。

我必须做的是实现我自己的 DefaultDirectoryScanner。

它在启动时注册一个watcher,当它通过listEligibleItems(..)收到来自inbound-channel-adapter的请求时检查watcher

为了能够处理两个单独的文件目录,我简单地添加了两个不同的观察器和两个不同的文件轮询器。这主要是为了确保代码的可读性,并避免绕过入站通道适配器的 "directory" 部分。