我有一个组件,该组件使用spring框架File集成在每次文件到达某个位置时启动一个进程。从日志文件中可以看到两个线程/进程/实例正在运行。有没有办法将其限制为一个?
第二个进程/线程似乎在第一个进程/线程之后几乎立即开始,并且它们相互干扰。第一个实例处理文件,但第二个实例尝试执行相同操作,并遇到filenotfound异常,因为第一个实例将其移动。
答案 0 :(得分:0)
首先,您需要考虑使用fixedDelay
而不是fixedRate
为文件入站通道适配器配置轮询器。这样,下一个轮询任务就不会开始,直到上一个轮询任务结束为止。
还可以考虑使用某些filter
不再处理同一文件。不知道您的用例是什么,但是简单的AcceptOnceFileListFilter
就足够了。为了方便起见,通道适配器上有一个prevent-duplicates
选项。
请参阅参考手册中的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/#files
还有关于轮询器行为的信息:https://docs.spring.io/spring-integration/docs/current/reference/html/#channel-adapter-namespace-inbound