1. 程式人生 > >Apache Camel 與 Spring Boot 整合,通過FTP定時採集、處理檔案

Apache Camel 與 Spring Boot 整合,通過FTP定時採集、處理檔案

1、概要:  

  本專案主要是通過在Spring平臺上配置Camel、FTP,實現定時從FTP伺服器下載檔案到本地、解析檔案、存入資料庫等功能。  

2、搭建空專案:

  Spring Boot有幾種自動生成空專案的機制:CLI、Spring tool suite、網站Spring Initializr,我們選擇第三個。

  1. 訪問網站http://start.spring.io/,如下圖
    spring initializer網站
  2. 在dependencies新增依賴包的時候,在框中輸入camle、jdbc、mysql會自動彈出提示,確認即為選中,如下圖:
    選擇依賴包
  3. 點選 generate project按鈕,生成專案,並將其匯入到ecipse,在pom.xml中新增camel-ftp依賴,注意版本號選擇與camel-spring-boot-stater的相同
    <
    dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-ftp</artifactId> <version>2.18.0</version> </dependency>
  4. 完整版的pom.xml檔案如下:
    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <
    artifactId>camel-spring-boot-starter</artifactId> <version>2.18.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-ftp</artifactId> <version>2.18.0</version>
    </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
  5. 待所有依賴jar下載到本地,基礎專案搭建完成

 3、配置Camel完成從ftp伺服器定時下載檔案到本地

  1. 在application.properties中配置遠端FTP伺服器的地址、埠、使用者名稱和密碼等資訊
    ftp.server.info=sftp://172.16.20.133:22/../home/temp/data?username=root&password=root&delay=5s&move=done&readLock=rename
    
    ftp.local.dir=file:C:/ftp/test

    注意:sftp伺服器的檔案位置是相對於root登入後的相對地址(被這裡坑到了),delay=5s是每隔5秒鐘掃描ftp伺服器上是否有新檔案生成,如果有下載到本地,並將伺服器上的檔案轉移到done資料夾(/home/temp/data/done),readLock=rename可以阻止camel讀取正在被寫入的檔案

  2. 配置路由,完成檔案下載
    @Component
    public class DownloadRouteDemo extends RouteBuilder {
        
        private static Logger logger = LoggerFactory.getLogger( DownloadRouteDemo.class );
    
        @Value("${ftp.server.info}")
        private String sftpServer;
        @Value("${ftp.local.dir}")
        private String downloadLocation;
    
        @Override
        public void configure() throws Exception {
            from( sftpServer ).to(  downloadLocation ).log(LoggingLevel.INFO, logger, "Downloaded file ${file:name} complete.");
        }
    
    }

    注意:要繼承camel的RouteBulider,重寫configure方法,大意是從ftp伺服器下載檔案到本地,並輸出檔名(執行時所需必要資訊都配置在application.properties檔案中)

  3. 為了讓java程序在後臺執行,需要在application.properties檔案中增加如下配置
    camel.springboot.main-run-controller=true
  4. 從ftp伺服器下載檔案的所有工作都已完成,執行CamelFtpSpringApplication.java,如果你的ftp伺服器相應的位置上有檔案,就會下載到本地所配置的資料夾下

 4、通過camel定時解析本地檔案並儲存到資料庫

  1. 在application.properties中增加如下配置
    route.parserfile.info = {{ftp.local.dir}}?delay=10s&move=done&readLock=rename
    route.parserfile.dir = {{ftp.local.dir}}/done

    注意兩個花括號是引用其他變數的配置

  2. 編寫解析檔案、入庫程式等處理器
    @Component
    public class LocationFileProcessor implements Processor {
    
        private static Logger logger = LoggerFactory.getLogger( LocationFileProcessor.class );
        
        
        @Value("${ftp.local.dir}")
        private String fileDir;
    
        @Autowired
        OrderService orderService;//業務邏輯處理元件
        
        @Override
        public void process(Exchange exchange) throws Exception {
            GenericFileMessage<RandomAccessFile> inFileMessage = (GenericFileMessage<RandomAccessFile>) exchange.getIn();
            String fileName = inFileMessage.getGenericFile().getFileName();//檔名
            String splitTag = File.separator;//系統檔案分隔符
            logger.info(fileDir + splitTag + fileName);//檔案的絕對路徑
            orderService.process(fileDir + splitTag + fileName);//解析入庫等操作
            
        }
    
    }


  3. 配置路由,完成業務邏輯的串聯
    @Component
    public class LocalTransformRoute  extends RouteBuilder {
    
        private static Logger logger = LoggerFactory.getLogger( LocalTransformRoute.class );
        
        @Value("${route.parserfile.info}")
        private String location;
        
        @Value("${route.parserfile.dir}")
        private String locationDir;
        
        @Autowired
        LocationFileProcessor locationFileProcessor;
        
        @Override
        public void configure() throws Exception {
            from( location ).process( locationFileProcessor ).to( locationDir ).log(LoggingLevel.INFO, logger, "tirans  file ${file:name} complete.");
        }
    
    }

    注意,比上面的路由多了process配置,即業務邏輯處理配置

  4. 至此,所有工作都已完成,重新執行CamelFtpSpringApplication.java即可實現ftp檔案定時下載、業務處理等(其中省去了很多,例如入庫操作等)

備註:只是camle spring ftp的一個演示demo,要運用於生產,還有好多需要完善的地方

相關推薦

Apache Camel Spring Boot 整合通過FTP定時採集處理檔案

1、概要:     本專案主要是通過在Spring平臺上配置Camel、FTP,實現定時從FTP伺服器下載檔案到本地、解析檔案、存入資料庫等功能。   2、搭建空專案:   Spring Boot有幾種自動生成空專案的機制:CLI、Spring tool suite、網站Spring Initializr,我

FastDFSspring boot整合

在專案Pom當中加入依賴 Maven依賴為 com.github.tobato fastdfs-client 1.26.3 將Fdfs配置引入專案 將FastDFS-Client客戶端引入本地化專案的方式非常簡單,在SpringBoot專案/src/[com.xxx.

activemq 學習系列(五) activemq spring boot 整合

-a pool autowire mapping pri control ESS fin tid activemq 與 spring boot 整合 1、添加依賴 <dependency> <groupId>

Apache Camel繼承Spring Boot 實現檔案遠端複製和轉移

pom.xml <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-ftp</artifactId> <version>2.

javaEE Freemarker模板引擎FreemarkerSpring整合生成靜態頁面

applicationContext.xml(Spring配置檔案): <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sche

Thymeleaf Or Freemarker Spring boot 整合

整體步驟:(1)            在pom.xml中引入thymeleaf;(2)            如何關閉thymeleaf快取(3)            編寫模板檔案.htmlSpring Boot預設就是使用thymeleaf模板引擎的,所以只需要在pom.xml加入依賴即可:<de

SpringData JPA HibernateSpring Boot整合

dependencies { compile('org.springframework.boot:spring-boot-starter-web') //新增thymeleaf依賴 compile('org.springframework.boot:spring

基於tobato的fastdfsspring boot整合實現檔案上傳和下載

專案結構: pom.xml檔案新增配置: <!-- fastdfs --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastd

MyBtais整合Spring Boot整合TypeHandler對列舉類(enum)處理

概要 問題描述 我想用列舉類來表示使用者當前狀態,列舉類由 code 和 msg 組成,但我只想把 code 儲存到資料庫,查詢處理,能知道使用者當前狀態,這應該怎麼做呢?在 Spring 整合

spring boot 整合mybatis 通過官方mybatis-spring-boot-starter

pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XM

Spring-Boot整合freemarker引入靜態資源cssjs等(轉)

mark pan 創建 line path main 實現 content -m 一、概述springboot 默認靜態資源訪問的路徑為:/static 或 /public 或 /resources 或 /META-INF/resources 這樣的地址都必須定義在src/

spring boot整合雙持久層框架jpamybatis

分享 註意 準備 emp star lease 框架 ins 復雜   公司之前用的是spring boot + jpa,但由於jpa無法完美的解決某些動態查詢問題,就使用的jdbcTemplate 動態封裝SQL,由於代碼相對復雜,可讀性差,現準備再引入mybatis。下

Spring Boot整合之模板引擎(ThymeleafFreemarkerjsp)

1. Thymeleaf模板 1.1 在pom.xml中新增Thymeleaf依賴 <!--使用thymeleaf標籤--> <dependency> <groupId>org.springframework.boot</groupId>

Spring-Boot整合freemarker引入靜態資源cssjs等

一、概述 springboot 預設靜態資源訪問的路徑為:/static 或 /public 或 /resources 或 /META-INF/resources 這樣的地址都必須定義在src/main/resources目錄檔案中,這樣可以達到在專案啟動時候可以自動載入為專案靜態地址目錄到cl

Spring Boot 整合之模板引擎(jspFreemarker Thymeleaf )

整合JSP模板   新增依賴 建立 maven 工程,在 pom.xml 檔案中新增如下依賴: <dependency> <groupId>javax.servlet</groupId> <artifactId>

spring boot下如何通過rest 介面 來上傳檔案 和下載檔案 到 hadoop hdfs

本文將用程式碼來演示在spring boot裡面,用hadoop client,通過restful API來上傳檔案 和下載檔案 到 hadoop hdfs。 裡面有一些程式碼依賴坑,注意繞行。 前提: 如果你的程式碼在windows上執行,去連線linux上的hado

Android通過ftp上傳下載檔案

                在開發中有可能會遇到通過ftp協議來上傳和下載檔案,網上也有很多的帖子,但大部分都沒什麼用,通過參考其他和自己思考寫了兩個經測試可用的方法,這兩個方法需要一個commo

Spring Boot 整合dubbozookeeper實現不同專案之間資料通過服務的傳遞

一、安裝zookeeper 1、下載路徑:http://mirrors.hust.edu.cn/apache/zookeeper/ 可以自己選擇版本進行下載(同時支援windows和linux) 2、目錄結構 3、修改conf下的配置檔案zoo.cfg 4、

Spring Boot 整合 Elasticsearch實現 function score query 權重分查詢

search 小寫 業務 jpg 啟動會 last cti cal agen 摘要: 原創出處 www.bysocket.com 「泥瓦匠BYSocket 」歡迎轉載,保留摘要,謝謝! 『 預見未來最好的方式就是親手創造未來 – 《史蒂夫·喬布斯

Spring Boot 整合 Apache Solr 異常:Expected mime type application/octet-stream but got text/html 的解決.

註釋 info 過時 查看 異常 dea 沒有 時間 發的 解決方法:Spring Data Solr 3.0 以上版本 將@SolrDocument(solrCoreName = "new_core") 中的solrCoreName 字段改為使用collection字段