欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring boot項目集成Camel FTP的方法示例

 更新時間:2018年10月09日 11:43:09   作者:LuckyDL  
這篇文章主要介紹了Spring boot項目集成Camel FTP的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1、Spring 中集成camel-ftp

近期項目中涉及到定期獲取讀取并解析ftp服務(wù)器上的文件,自己實現(xiàn)ftp-client的有些復(fù)雜,因此考慮集成camel-ftp的方式來解決ftp文件的下載問題。自己則專注于文件的解析工作.

demo: https://github.com/LuckyDL/ftp-camel-demo

1.1、POM引用

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-spring-boot-starter</artifactId>
  <version>2.22.1</version>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-ftp</artifactId>
  <version>2.22.1</version>
</dependency>

注意:在選擇版本的時候,如果SpringBoot版本是1.5.10.RELEASE的話,那么camel的版本最高只能使用2.21.2,使用2.22版本將會報錯。經(jīng)測試的配套關(guān)系如下:

SrpingBoot Camel
1.5 <=2.21.2
2.0 >=2.22.x

其他情況都會出現(xiàn)錯誤.

1.2、SpringBoot application.yml配置

ftp:
 addr: 172.18.18.19:21  # ftp地址、端口
 name: ftpuser
 password: ftp2018
 options: password=${ftp.password}&readLock=rename&delay=10s&binary=true&filter=#zipFileFilter&noop=true&recursive=true
 url: ftp://${ftp.name}@${ftp.addr}/?${ftp.options}
 # 本地下載目錄
 local-dir: /var/data

# 后臺運行進程
camel:
 springboot:
  main-run-controller: true

management:
 endpoint:
  camelroutes:
   enabled: true
   read-only: true

配置說明:

  • delay:每次讀取時間間隔
  • filter: 指定文件過濾器
  • noop:讀取后對源文件不做任何處理
  • recursive:遞歸掃描子目錄,需要在過濾器中允許掃描子目錄
  • readLock:對正在寫入的文件的處理機制

更多參數(shù)配置見官方手冊

1.3、配置路由

要配置從遠端服務(wù)器下載文件到本地,格式如下,from內(nèi)部為我們在上面配置的url,to為本地文件路徑。

@Component
public class DownloadRoute extends RouteBuilder {
  /** logger */
  private static final Logger logger = LoggerFactory.getLogger(DownloadRoute.class);

  @Value("${ftp.server.info}")
  private String sftpServer;
  
  @Value("${ftp.local.dir}")
  private String downloadLocation;
  
  @Autowired
  private DataProcessor dataProcessor;

  @Override
  public void configure() throws Exception{
    from(sftpServer)
        .to(downloadLocation)
        .process(dataProcessor)
        .log(LoggingLevel.INFO, logger, "Download file ${file:name} complete.");
  }
}

說明:

若將from配置為本地地址,to配置為遠端地址,則可以實現(xiàn)向遠端服務(wù)器上傳文件

process是數(shù)據(jù)處理器,如果僅僅是下載文件到本地,那么就不需要該配置。

也可以配置多條路由也處理不同的業(yè)務(wù):

@Override
  public void configure() throws Exception{
    // route1
    from(sftpServer)
        .to(downloadLocation)
        .process(dataProcessor)
        .log(LoggingLevel.INFO, logger, "Download file ${file:name} complete.");
    // route2
    from(xxx).to(xxxx);
    
    // route3
    from(xxxx).to(xxx).process(xxx);
  }

1.4、配置文件過濾

如果ftp服務(wù)器上有很多文件,但是我們需要的只是其中的一種,全部下載下來,有業(yè)務(wù)層來實現(xiàn)過濾肯定不合適,我們可以使用camel-ftp的文件過濾器,通過url中的filter來指定,如“filter=#zipFileFilter”,
用戶需要實現(xiàn)GenericFileFilter接口的accept方法。

例如我們只需要下載后綴名為.zip的壓縮包到本地,過濾器的編寫方法如下,因為我要遞歸掃描子目錄,因此類型為目錄的文件也需要允許通過。

/**
 * camel ftp zip文件過濾器
 */
@Component
public class ZipFileFilter implements GenericFileFilter {
  
  @Override
  public boolean accept(GenericFile file) {
    return file.getFileName().endsWith(".zip") || file.isDirectory();
  }
}

1.5、文件處理器

文件處理器就是我們對下載到本地的文件進行處理的操作,比如我們可能需要對下載的文件重新規(guī)劃目錄;或者解析文件并進行入庫操作等。這就需要通過實現(xiàn)Processer的process方法。

本文中的demo就是通過processor來解析zip包中的文件內(nèi)容:

@Component
public class DataProcessor implements Processor {

  /** logger */
  private static final Logger logger = LoggerFactory.getLogger(DataProcessor.class);


  @Value("${ftp.local-dir}")
  private String fileDir;

  @Override
  public void process(Exchange exchange) throws Exception {
    GenericFileMessage<RandomAccessFile> inFileMessage = (GenericFileMessage<RandomAccessFile>) exchange.getIn();
    String fileName = inFileMessage.getGenericFile().getFileName();
    String file_path = fileDir + '/' + fileName;
    readZip(file_path);
  }
  
  ...  // 省略數(shù)據(jù)處理方法
}

2、參考資料

關(guān)于camel ftp的各個參數(shù)配置,參見官方手冊:http://camel.apache.org/ftp2.html

此處需要注意的是,camel ftp手冊里面只寫了ftp獨有的一些配置項,camel-ftp組件繼承自camel-file,手冊里面有說明,就一句話,不注意就可能忽略了,筆者就是沒注意,被遞歸掃描子目錄的問題折騰了2天(閱讀要細心o(╥﹏╥)o)。。。因此有一些參數(shù)配置項可能在camel-ftp手冊里面找不到,請移步至:http://camel.apache.org/file2.html

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java設(shè)計模式之享元模式(Flyweight Pattern)詳解

    Java設(shè)計模式之享元模式(Flyweight Pattern)詳解

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計模式,旨在減少對象的數(shù)量,以節(jié)省內(nèi)存空間和提高性能,本文將詳細的給大家介紹一下Java享元模式,需要的朋友可以參考下
    2023-07-07
  • Java解決青蛙跳臺階問題流程

    Java解決青蛙跳臺階問題流程

    所謂的青蛙跳臺階問題,就是指一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。本文將用Java解決這一問題,需要的可以參考一下
    2022-03-03
  • Java使用Hutool執(zhí)行日期的加法和減法操作方法

    Java使用Hutool執(zhí)行日期的加法和減法操作方法

    使用Hutool進行日期的加法和減法操作,可以使用`DateUtil.offsetXXX()`方法來實現(xiàn),這些方法會返回一個新的日期,而不是在原日期上進行修改,本文給大家介紹Java使用Hutool執(zhí)行日期的加法和減法操作方法,感興趣的朋友一起看看吧
    2023-11-11
  • obix協(xié)議在java中的配置和使用詳解

    obix協(xié)議在java中的配置和使用詳解

    這篇文章主要給大家介紹了關(guān)于obix協(xié)議在java中的配置和使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 30條Java代碼編寫經(jīng)驗分享

    30條Java代碼編寫經(jīng)驗分享

    你知道寫好Java代碼的30條經(jīng)驗是什么嗎?這篇文章主要為大家分享了30條Java代碼編寫經(jīng)驗技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 解析Java 泛型什么情況下不能使用

    解析Java 泛型什么情況下不能使用

    這篇文章主要介紹了解析Java 泛型什么情況下不能使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Springboot任務(wù)之異步任務(wù)的使用詳解

    Springboot任務(wù)之異步任務(wù)的使用詳解

    今天學(xué)習(xí)了一個新技能SpringBoot實現(xiàn)異步任務(wù),所以特地整理了本篇文章,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java日常練習(xí)題,每天進步一點點(41)

    Java日常練習(xí)題,每天進步一點點(41)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • java使用Jsoup組件生成word文檔

    java使用Jsoup組件生成word文檔

    java使用Jsoup組件生成word文檔的方法
    2013-11-11
  • Java線程重復(fù)執(zhí)行以及操作共享變量的代碼示例

    Java線程重復(fù)執(zhí)行以及操作共享變量的代碼示例

    這篇文章主要介紹了Java中對線程重復(fù)執(zhí)行以及操作共享變量的代碼示例,來自于Java面試題目的練習(xí)整理,需要的朋友可以參考下
    2015-12-12

最新評論