使用 Apache Camel Spring XML 将 CSV 加载到数据库(CSV 到 SQL 组件)

Load CSV to database using Apache Camel Spring XML (CSV to SQL components)

我想做一个简单的文件轮询,它接收一个 CSV 文件,将其解组并将特定字段加载到数据库中。我想这应该是一个很常见的场景,但我需要使用 Spring XML 而不是创建 java 处理器。令我惊讶的是,我发现很难在整个互联网上找到任何关于它的例子。可能我只是没找对地方,但值得一提的是,我正在分享我的问题和我自己的答案,以防其他人发现它有用。

这是我想要实现的目标:

  1. 自动从文件夹中选择 CSV 文件。
  2. 将特定字段从 CSV 加载到 table

CSV 看起来像这样

ID,KEY,FULLNAME,DOCID
1,1,PERSON1,THY
2,1,PERSON2,XCV
3,1,PERSON3,OIU
4,1,PERSON4,KJM

需要保存到 table(仅 ID 和 FULLNAME 字段):

个人

ID NAME
1 PERSON1
2 PERSON2
3 PERSON3
4 PERSON4

我正在使用 Camel 3.14.0。

Spring XML 对我有用的 DSL 路由:

  <route>
     <from uri="file://D:\path?include=(?i).*.csv&amp;moveFailed=ErrorFiles&amp;delay=5000"/>
     <unmarshal>
        <csv captureHeaderRecord="true" useMaps="true"/>  
     </unmarshal>
     <!-- Clear contents from destination table.  -->
     <to uri="sql:DELETE FROM PERSON?datasource=#customerDS&amp;noop=true"/> 
     <split> <!--Split unmarshalled body in individual maps that will be sent one by one to sql component -->
        <simple>${body}</simple> <!--As unmarshal is a List <Map> then this automatically gets list split in individual maps I guess -->
        <log message="Record being processed:  ${body}" loggingLevel="INFO"/>
        <to uri="sql:INSERT INTO PERSON(ID,NAME) VALUES(:#ID,:#FULLNAME)?dataSource=#customerDS" /> 
     </split>
  </route>