使用案例:我想听一个文件目录,每当有人对文件进行更改时,我都希望它能够启动一个进程。
到目前为止,这是我的配置:
<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获取一个文件数组并返回一个文件列表,按文件结尾排序。这似乎是无休止的,并且“阻止重复” - 检查是在过滤器之后完成的(即添加了文件,但似乎它没有发送到rulesChannel)。
无论如何,我的问题是我需要这整件事来获取文件更改,而不是新文件。主要是,它是一个不时被更改的配置文件,我需要更新它以保持同步。
是的,这是一个可怕的解决方案,但这不是我的电话,似乎我别无选择。
有什么好主意吗?
编辑:我和http://docs.spring.io/spring-integration/reference/html/files.html#_watchservicedirectoryscanner玩了一下,看看我是否可以复制该类并将其与StandardWatchEventKinds.ENTRY_MODIFY一起使用,但它似乎没什么帮助。
基本上,如果我有一个很好的方法来“开始一个线程并保持运行”,我也会没事的。
答案 0 :(得分:0)
我必须做的是实现我自己的DefaultDirectoryScanner。
它在启动时注册一个观察者,并在通过listEligibleItems(..)
从入站通道适配器接收请求时检查观察者为了能够处理两个单独的文件目录,我只添加了两个不同的观察者和两个不同的文件轮询器。这主要是为了确保代码的可读性,并避免在入站通道适配器的&#34;目录&#34; -part中乱码。