Apache Camel and Spring with properties file to move files

This is an extension to the camel tutorials


This highlights  the use of a properties file to configure polling folder, destination folder, file pattern to look for, done file name, etc.

Step 1: The applicationContext.xml file is as shown below, and please note that "org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer" is used configure the properties file.

  <beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

 <context:component-scan base-package="com.mycompany.app3" />

 <context:annotation-config />
 <context:spring-configured />

 <task:annotation-driven />

 <bean id="bridgePropertyPlaceholder"
  class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
  <property name="locations">
   <list>
    <value>classpath:*.properties</value>
   </list>
  </property>
 </bean>

 <import resource="classpath*:route.xml" />
 
 </beans>





Step 2: The properties file myapp.propertieswill be something like

myapp.in.dir=C:/temp/simple/input
myapp.in.file.pattern=AK(TAX|PROPERTY|TRADE)\.CSV
myapp.out.dir=C:/temp/simple/output
myapp.out.file.pattern=GBST_${file:name.noext}_${date:now:yyMMdd}_${date:now:HHmm}.${file:name.ext}

Step 3: Note that properties from the myapp.properties are referred with "{{ }}" double curly brackets. The Apache camel file language expressions are denoted with ${} as shown above to extract file name, file extension, etc.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:c="http://www.springframework.org/schema/c"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:camel="http://camel.apache.org/schema/spring"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
    
 <routeContext id="myapp" xmlns="http://camel.apache.org/schema/spring">
  <route id="myappFilePolling" >
   <from uri="file:{{myapp.in.dir}}?include={{myapp.in.file.pattern}}&delay=5000&initialDelay=5000&readLock=rename&move=archive&moveFailed=error&doneFileName=${file:name}.END" />
   <to uri="file:{{myapp.out.dir}}?fileName={{myapp.out.file.pattern}}" />
  </route>
 </routeContext>

</beans>


Step 4: Finally, the route.xml.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
 xmlns:camel="http://camel.apache.org/schema/spring"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

 <import resource="classpath*:myapp.xml" />

 <camel:errorHandler id="defaultErrorHandler" type="DefaultErrorHandler" />

 <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring"
  errorHandlerRef="defaultErrorHandler">

  <routeContextRef ref="myapp" />

  <dataFormats>
   <zip id="myZip" />
  </dataFormats>
 </camelContext>

</beans>

No comments:

Post a Comment