pom.xml

<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<version>2.18.0</version>
</dependency>

URI的格式

ftp://[username@]hostname[:port]/directoryname[?options]

sftp://[username@]hostname[:port]/directoryname[?options]

ftps://[username@]hostname[:port]/directoryname[?options]

如果未提供端口号,Camel将根据协议提供默认值(ftp = 21,sftp = 22,ftps = 2222)。

例:
ftp://173.5.206.53:2121/MHE/?username=ftpAdmin&password=123456&binary=true&passiveMode=true&delete=true&delay=60000 注:ftp的路径必须是 当前ip:端口 + 当前账号密码登陆进去的目录往下走(不能往上走,没权限),路径才会生效,否则不会报错,也不会进行文件操作

配置文件信息:

#文件压缩本地地址(备份)
ftp.local.backups.dir=file:D:/gz/backups?move=delete&delay=30s
#大数据服务器地址(备份)
ftp.bigdata.backups.adress=sftp://218.984.130.146:51268/../apps/chinamobile/bigdata/dataConsistencyRepair/backups/?username=root&password=Redoor2018@net123&delay=30s #大数据服务器修复地址(运维存放文件夹,使用后存放到备份文件中)
ftp.bigdatarepair.adress=sftp://218.984.130.146:51268/../apps/chinamobile/bigdata/bigdatarepair/?username=root&password=Redoor2018@net123&move=/apps/chinamobile/bigdata/bigdatarepair/backups&delay=30s
#本地文件修复地址(复制到自定义文件夹)
ftp.local.repair=file:D:/localrepair #对比大数据差异文件存放地址(通知运维)
ftp.bigdatadifference.adress=sftp://218.984.130.146:51268/../apps/chinamobile/bigdata/difference/?username=root&password=Redoor2018@net123&delay=30s camel.springboot.main-run-controller=true

文件实现文件复制,转移:

/**
* 远程文件监听和拉取
*/
@Component
public class DownLoadRouteBuilder extends RouteBuilder{ private Logger log = Logger.getLogger(DownLoadRouteBuilder.class); /**
* 文件压缩本地地址
*/
@Value("${ftp.local.dir}")
private String localFileDir; /**
* 大数据服务器地址
*/
@Value("${ftp.bigdata.adress}")
private String bigDataServer; /**
* 文件压缩本地地址(上传备份)
*/
@Value("${ftp.local.backups.dir}")
private String localFileDirBackups; /**
* 大数据服务器地址(上传备份)
*/
@Value("${ftp.bigdata.backups.adress}")
private String bigDataBackupsServer; /**
* 本地文件修复地址
*/
@Value("${ftp.local.repair}")
private String localRepair;
/**
* 大数据服务器修复地址
*/
@Value("${ftp.bigdatarepair.adress}")
private String bigDataRepairServer; /**
* 对比大数据差异文件存放地址
*/
@Value("${ftp.bigdatadifference.adress}")
private String bigdatadifference; @Override
public void configure() throws Exception {
//文件上传大数据
from(localFileDir).to(bigDataServer).process("transferDataProcessToBigData");
//文件上传大数据(上传备份) 备份文件不存redis有一份就好
from(localFileDirBackups).to(bigDataBackupsServer).process("transferDataProcessToBigData"); //修复文件拉取
from(bigDataRepairServer).to(localRepair).process("transferDataProcessBigDataRepairToLocal");
//对比大数据差异文件存放地址
from(bigdatadifference).to(bigdatadifference).process("transferDataProcessToBigDataDifference"); System.out.println("file download ok...");
log.info("远程文件监听和拉取 已启动.......");
} }

文件复制获取信息:

    文件远程复制和移动以后,本对象中可以显示

文件一:

/**
* 监听本地修复文件
*/
@Component
public class TransferDataProcessBigDataRepairToLocal implements Processor{ private Logger log = Logger.getLogger(TransferDataProcessBigDataRepairToLocal.class); @Autowired
private RepairRedisUtil repairRedisUtil;
/**
* 本地文件修复地址
*/
@Value("${ftp.local.repair}")
private String localRepair; /**
* redis工具类
*/
@Autowired
RedisUtils redisUtils; /**
* 读取GZ压缩文件,多线程
*/
@Autowired
AsyncService asyncService; @Override
public void process(Exchange exchange) throws Exception {
GenericFileMessage<RandomAccessFile> inFileMessage = (GenericFileMessage<RandomAccessFile>) exchange.getIn();
String fileName = inFileMessage.getGenericFile().getFileName();//文件名
String splitTag = File.separator;//系统文件分隔符
String absolutePath = localRepair + splitTag + fileName;
System.out.println(absolutePath);//文件的绝对路径
System.out.println("read file and push to falcon..."); System.out.println("准备修复文件!");
//文件的绝对路径去掉:file:
String filePath = absolutePath.substring(absolutePath.indexOf("file:")+"file:".length()); //创建redisKey 项目名称,模块名称,功能名称,自定义名称
String bigdatarepair = redisUtils.buildRedisKey("OneLink","DataConsistencyRepair","bigdatarepair","list"); //文件名称解析并进行redis缓存
DataRepairCacheModel dataRepairModel = repairRedisUtil.getFileInfo(fileName);
//获取缓存key
String cacheKey = repairRedisUtil.getDataRepairCacheKey(dataRepairModel.getBusinessCode());
//文件名称缓存
repairRedisUtil.CacheRepairData(cacheKey,dataRepairModel,0); }
}

文件二:

/**
* 监听大数据服务器是否上传成功
*/
@Component
public class TransferDataProcessToBigData implements Processor{ private Logger log = Logger.getLogger(TransferDataProcessToBigData.class); /**
* redis工具类
*/
@Autowired
RedisUtils redisUtils; /**
* 大数据服务器地址
*/
@Value("${ftp.bigdata.adress}")
private String bigDataServer; @Override
public void process(Exchange exchange) throws Exception {
GenericFileMessage<RandomAccessFile> inFileMessage = (GenericFileMessage<RandomAccessFile>) exchange.getIn();
String fileName = inFileMessage.getGenericFile().getFileName();//文件名
String splitTag = File.separator;//系统文件分隔符
System.out.println(bigDataServer + splitTag + fileName);//文件的绝对路径
System.out.println("read file and push to falcon..."); //添加:判断redis是否存在,不存在就删除,存在就不管 //创建redisKey 项目名称,模块名称,功能名称,自定义名称
String redisName = redisUtils.buildRedisKey("OneLink","DataConsistencyRepair","upload","List");
//获取
Map<String, DataUploadModel> stringObjectMap = (Map<String, DataUploadModel>) JSON.parseObject((String)redisUtils.get(redisName),Map.class); //删除
stringObjectMap.remove(fileName); //将集合存入缓存中
redisUtils.set(redisName, JSONObject.toJSONString(stringObjectMap)); log.info("文件信息:"+fileName+"上传大数据服务器成功!");
log.info("文件信息:"+fileName+"从redis删除标记!");
}
}

文件三:

/**
* 对比大数据差异文件存放地址监听
*/
@Component
public class TransferDataProcessToBigDataDifference implements Processor{ private Logger log = Logger.getLogger(TransferDataProcessToBigDataDifference.class); /**
* redis工具类
*/
@Autowired
RedisUtils redisUtils;
@Autowired
private Task task; /**
* 对比大数据差异文件存放地址
*/
@Value("${ftp.bigdatadifference.adress}")
private String bigdatadifference; @Override
public void process(Exchange exchange) throws Exception {
GenericFileMessage<RandomAccessFile> inFileMessage = (GenericFileMessage<RandomAccessFile>) exchange.getIn();
String fileName = inFileMessage.getGenericFile().getFileName();//文件名
String splitTag = File.separator;//系统文件分隔符
System.out.println(bigdatadifference + splitTag + fileName);//文件的绝对路径
System.out.println("read file and push to falcon...");
task.send();
System.out.println("给运维发送邮件!");
}
}

官方API文档:http://camel.apache.org/ftp2.html

Apache Camel继承Spring Boot 实现文件远程复制和转移的更多相关文章

  1. Apache Camel 与 Spring Boot 集成,通过FTP定时采集、处理文件 (转)

    1.概要: 本项目主要是通过在Spring平台上配置Camel.FTP,实现定时从FTP服务器下载文件到本地.解析文件.存入数据库等功能. 2.搭建空项目: Spring Boot有几种自动生成空项目 ...

  2. Apache Camel,Spring Boot 实现文件复制,转移 (转)

    基本框架 Apache Camel Spring Boot Maven 开发过程 1.新建一个POM(quickstart)项目,在POM文件中添加Camel和Spring Boot的依赖 <p ...

  3. Spring Boot入门——文件上传与下载

    1.在pom.xml文件中添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  4. 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

    原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...

  5. spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)

    一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...

  6. Spring Boot属性文件配置文档(全部)

    This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...

  7. spring 及 spring boot 资源文件配置

    Spring配置文件引入xml文件: <import resource=" " />标签使用总结 https://www.cnblogs.com/javahr/p/83 ...

  8. spring boot实现文件上传下载

    spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心.大部分的配置从开发人员可见变成了相对 ...

  9. 【Spring Boot】Spring Boot之使用Alibaba Cloud Toolkit(Idea插件)本地一键部署Spring Boot项目到远程服务器

    一.Alibaba Cloud Toolkit(Idea插件)的安装 1)Alibaba Cloud Toolkit 介绍 Cloud Toolkit 是本地 IDE 插件,帮助开发者更高效地开发.测 ...

随机推荐

  1. (转载)My97 datepicker使用指南

    这里先显示大家都可以看到的My97DatePicker的用法: WdatePicker日历控件使用方法(http://www.cnblogs.com/yuhanzhong/archive/2011/0 ...

  2. 2018-2019-2-20175332-实验四《Android程序设计》实验报告

    一.Android Stuidio的安装测试 题目要求: 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装 Android St ...

  3. DIV+CSS标准化布局

    1.DIV+CSS布局 说明:在网页开发制作中,需要对页面内容进行“模块化标准布局”,把内容放入到某个位置,让页面形成固定规律展示出来 模块化:在网页中所有的内容都是以块来展示的 标准化:在开发网站时 ...

  4. Dock镜像初探索

    一.安装CentOS版DockerCE 1.1 卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-com ...

  5. python-基础-练习和面试题

    给程序传参数 import sys print(sys.argv) 运行结果: 列表推导式 所谓的列表推导式,就是指的轻量级循环创建列表 1. 基本的方式 2. 在循环的过程中使用if 3. 2个fo ...

  6. LA4123 Glenhow Museum

    题目大意:蓝书P115 不愧是WF的题 不难发现R的个数为L/2 + 2,O的个数为L/2 - 2 三种做法,第一种比较麻烦,dp[i][j][k][l]表示i个R,j个O,第一个元素是(k)R,最后 ...

  7. Javascript实现多行字符串

    打开百度首页,进入控制台的时候,我们在console控制台总可以看到一段文字: 这些文字是如何显示在控制台的呢?? Javascript中的函数被看作是一个对象拥有自己的方法,其中一个小方法fn.to ...

  8. Angular js 具体应用(一)

    1,首先引用Angular  百度静态资源库搜索Angular  复制链接,在HTML中嵌入script 最好写在正文下面 <script type="text/javascript& ...

  9. day38 08-Spring的id、name和scope顺序

    访问的路径的是/login.id不允许出现特殊的字符./是特殊的字符.Struts 2已经没有/,action的名字已经不带/了.现在的开发中一般使用id这个属性即可. 这个类在被Spring创建的时 ...

  10. 洛谷P1965 转圈游戏 [2013NOIP提高组 D1T1][2017年6月计划 数论04]

    P1965 转圈游戏 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 ...