我正在尝试从目录中选择一个文件,拆分文件并将每个拆分行添加到activemq。我在此过程中遇到异常处理问题。让我们说目录中的文件是二进制文件(可执行文件),然后拆分器会发出org.apache.camel.RuntimeCamelException和java.nio.charset.MalformedInputException异常。如果发生这种情况,那么我需要捕获这些异常,不应该在activemq中添加任何内容,并且只有特定的线程应该在记录异常后退出。在线推荐并编写了以下代码,但不知道如何停止添加到activemq并退出特定线程。
<route id="msg_producer">
<from uri="input.file.from" />
<doTry>
<split parallelProcessing="true" executorServiceRef="msgProducer"
streaming="true">
<tokenize token="\n"></tokenize>
<to uri="input.activemq.to" />
</split>
<doCatch>
<exception>org.apache.camel.RuntimeCamelException</exception>
<exception>java.nio.charset.MalformedInputException</exception>
<handled> <constant>true</constant></handled>
<setBody>
<simple>${exception.stacktrace}</simple>
</setBody>
<setHeader headerName="CamelFileName">
<simple>${file:onlyname.noext}_error.log</simple>
</setHeader>
</doCatch>
</doTry>
</route>
答案 0 :(得分:1)
正如@claus Ibsen所说过滤文件你可以使用filefilter属性,这样你只能选择基于扩展名的文件和一些像这样的标准模式
<bean id="FileFilter" class="org.apache.camel.component.file.AntPathMatcherGenericFileFilter">
<!-- ? matches one character
* matches zero or more characters
** matches zero or more directories in a path -->
<property name="includes" value="#{databaseProperties.getProperties().getProperty('file.name.pattern')}"/>
<!-- if you wan to exclude specific files say bad in name or .exe files. Use comma to separate multiple excludes -->
<!-- <property name="excludes" value="**/*bad*,**/*.exe"/> -->
</bean>
并且你的file.name.pattern可以是这样的** / contract.csv