我有一条骆驼路线,看起来像下面的路线。如果所有记录都成功解析,那么我将从onCompletion步骤中收到一封电子邮件。如果一条记录发生异常,则将处理其余的记录,这很好,但是不会触发onCompletion步骤。
我想要的是即使有错误也可以运行onCompletion步骤,并能够发送一条消息,指出“路线已完成,但有错误”。我怎样才能做到这一点?
<route id="route1">
<from uri="file://C:/TEMP/load?noop=true&idempotentRepository=#sysoutStore&sorter=#externalDataFilesSorter"/>
<choice>
<when>
<simple>${file:name} regex '*file.*.(txt)'</simple>
<to uri="direct:RouteFile" />
</when>
</choice>
</route>
<route id="testRouteDirect">
<from uri="direct:RouteFile" />
<onException>
<exception>java.lang.IllegalArgumentException</exception>
<redeliveryPolicy maximumRedeliveries="1" />
<handled>
<constant>true</constant>
</handled>
<to uri="log:java.lang.IllegalArgumentException"></to>
</onException>
<onException>
<exception>java.text.ParseException</exception>
<redeliveryPolicy maximumRedeliveries="1" />
<handled>
<constant>true</constant>
</handled>
<to uri="log:java.text.ParseException"></to>
</onException>
<split parallelProcessing="false" strategyRef="exchangePropertiesAggregatorStrategy" >
<tokenize token="\r\n"/>
<to uri="log:Record"></to>
</split>
<onCompletion>
<to uri="log:completion"></to>
<to uri="smtp://mail.com?contentType=text/html&[email protected]&[email protected]&subject=we're done" />
</onCompletion>
</route>
最佳答案
路由的最佳部分是,您的路由中包含onException,其值为handler = true。因此,将您的onCompletion移到父route(route1),应该可以!
关于java - Apache Camel路由:发生异常时未达到onCompletion吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38462789/