最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、Spring 中集成camel-ftp

近期項目中涉及到定期獲取讀取并解析ftp服務器上的文件,自己實現(xiàn)ftp-client的有些復雜,因此考慮集成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版本將會報錯。經測試的配套關系如下:

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、配置路由

要配置從遠端服務器下載文件到本地,格式如下,from內部為我們在上面配置的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)向遠端服務器上傳文件

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

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

@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服務器上有很多文件,但是我們需要的只是其中的一種,全部下載下來,有業(yè)務層來實現(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包中的文件內容:

@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、參考資料

關于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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Springboot項目出現(xiàn)java.lang.ArrayStoreException的異常分析

    Springboot項目出現(xiàn)java.lang.ArrayStoreException的異常分析

    這篇文章介紹了Springboot項目出現(xiàn)java.lang.ArrayStoreException的異常分析,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • Spring Boot 入門教程

    Spring Boot 入門教程

    相信很多人都接觸spring框架很長時間了,每次搭建spring框架的時候都需要配置好多的jar、xml,做很多繁瑣重復的配置,稍微不留神就會出現(xiàn)各種各樣的問題。今天給大家介紹一下如何利用Spring Boot快速的搭建一個簡單的web應用
    2017-03-03
  • Java8中stream流的collectingAndThen方法應用實例詳解

    Java8中stream流的collectingAndThen方法應用實例詳解

    Java8中的Stream流提供了collectingAndThen方法,用于對歸納結果進行二次處理,文章通過User類的數(shù)據(jù)填充,演示了如何使用該方法進行集合去重、查找最高工資員工、計算平均工資等操作,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • SpringBoot動態(tài)定時任務實現(xiàn)與應用詳解

    SpringBoot動態(tài)定時任務實現(xiàn)與應用詳解

    定時任務在許多應用場景中是必不可少的,特別是在自動化任務執(zhí)行、定期數(shù)據(jù)處理等方面,定時任務能極大地提高系統(tǒng)的效率,然而,隨著業(yè)務需求的變化,定時任務的執(zhí)行頻率或時間點可能需要動態(tài)調整,所以本文給大家介紹了SpringBoot動態(tài)定時任務實現(xiàn)與應用
    2024-08-08
  • Spring?Bean創(chuàng)建流程分析講解

    Spring?Bean創(chuàng)建流程分析講解

    很多時候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來選擇是否在容器中加載某個Bean,這就是Bean的加載控制,一般我們可以通過編程式或注解式兩種不同的方式來完成Bean的管理
    2023-01-01
  • Java泛型類型擦除

    Java泛型類型擦除

    這篇文章主要為大家詳細介紹了Java泛型類型擦除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • springboot項目中mybatis-plus@Mapper注入失敗問題

    springboot項目中mybatis-plus@Mapper注入失敗問題

    這篇文章主要介紹了springboot項目中mybatis-plus@Mapper注入失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java中pdf轉圖片的實現(xiàn)方法

    java中pdf轉圖片的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava中pdf轉圖片的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java中靜態(tài)代理的使用與原理詳解

    Java中靜態(tài)代理的使用與原理詳解

    這篇文章主要介紹了Java中靜態(tài)代理的使用與原理詳解,代理模式是為一個對象提供一個替身,以控制對這個對象的訪問,即通過代理對象訪問目標對象.這樣做的好處是:可以在目標對象實現(xiàn)的基礎上,增強額外的功能操作,即擴展目標對象的功能,需要的朋友可以參考下
    2023-09-09
  • Java多線程之鎖的強化學習

    Java多線程之鎖的強化學習

    Java多線程的鎖都是基于對象的,Java中的每一個對象都可以作為一個鎖。這篇文章主要來通過一下示例為大家強化一下鎖的相關知識的掌握,希望對大家有所幫助
    2023-02-02

最新評論

南岸区| 汉沽区| 屯留县| 裕民县| 沙河市| 拜城县| 绵阳市| 石台县| 新野县| 柘城县| 夏津县| 镇赉县| 湘西| 调兵山市| 泰来县| 定南县| 伊金霍洛旗| 五指山市| 青州市| 通河县| 桦甸市| 扶绥县| 灵宝市| 鞍山市| 南华县| 利津县| 阿合奇县| 赫章县| 晋城| 泗水县| 两当县| 延吉市| 西平县| 镇雄县| 嘉义市| 齐齐哈尔市| 锡林浩特市| 平果县| 左贡县| 福泉市| 嘉定区|