我们有一个spring集成应用程序,它将监视传入的文件夹,然后处理文件。 当应用程序因维护或其他原因而关闭时,上游应用程序将传入的文件夹填充100K文件。 当重新启动应用程序时,它正在冻结它不处理传入的文件可能正在尝试加载所有传入的文件。
这是配置
<file:inbound-channel-adapter id="inFiles" channel="inFilesin" directory="file:${incoming.folder}"
queue-size="300" filename-regex="(?i)^(?!.*writing) " auto-startup="true" auto-create-directory="false" >
<int:poller id="fw.fileInboudPoller" fixed-rate="1" receive-timeout="3" time-unit="SECONDS"
max-messages-per-poll="10" task-executor="taskExecutor" />
</file:inbound-channel-adapter>
<task:executor id="taskExecutor" pool-size="10-20" queue-capacity="20" rejection-policy="CALLER_RUNS" />
感谢您的帮助。
谢谢, 莫汉
答案 0 :(得分:0)
建议将fixed-rate
更改为fixed-delay
。
您的文件处理速度非常慢,第一个选项是新任务应该在该时间之后启动(在您的情况下为1秒)。
另一个问题 - rejection-policy="CALLER_RUNS"
。在这种情况下,如果您的thead队列将耗尽(并且在您的情况下是100K文件),则计划的线程将完成实际工作。
Poller用于安排任务,使用大小 10 的ThreadPoolTaskScheduler
。因此,通过这种“havy-load”,您的应用可能会被冻结,因为所有应用都会共享池。
因此,请尝试使用fixed-delay
。在这种情况下,您的应用程序不会被冻结,但文件将被处理得更慢。
也许这可以帮到你:<int:resource-inbound-channel-adapter>
?