当文件被放入文件夹
时,我运行自动路线<route id ="automatic-route">
<from uri="file:C:/pathToFolder?noop=true"/>
<to uri="bean:automaticBean"/>
<to uri="activemq:STARTFLOW.Q"/>
</route>
我使用Bean AutomaticBean.java中的java方法将文件移动到名为“done”的子文件夹中。
然后我开始另一条路线处理文件。
<route id ="process-route">
<from uri="direct:process"/>
<to uri="bean:processBean"/>
</route>
当我在文件夹中移动多个文件时,它们被正确地移动到子文件夹(通过我的Bean。我使用java方法移动它们)。但是第二个bean(文件处理和SQL查询)有timeoutException,因为文件同时被移动和处理。
例如,当我移动5个文件时,其中3个文件被正确处理,但最后一个文件有一个timeoutException。是否可以逐个运行每个文件的第二个路径(安排它们或类似的东西)?并且只有在正确处理上一个文件时才启动文件的第二个路径?
我尝试使用noop = false; move = done并且我有无限的循环问题,我无法处理文件,因为它们已移动。这就是我使用noop = true的原因。此外,我的问题是关于第二个路线(文件都被正确移动)。
感谢。
答案 0 :(得分:1)
一种解决方案是轮询/done
文件夹中的新文件(已由automaticBean
处理和移动)。在这种情况下,您必须使用readLock
或doneFileName
来检查文件是否未被其他进程锁定。
<route id ="process-route">
<from uri="file:C:/pathToFolder/done?readLock=changed"/>
<to uri="bean:processBean"/>
</route>
答案 1 :(得分:0)
实际上,将maxMessagePerPoll设置为1的延迟添加了诀窍
<route id ="process-route">
<from uri="file:C:/pathToFolder/noop=true&delay=10000&maxMessagesPerPoll=1"/>
<to uri="bean:processBean"/>
</route>