Apache Camel继承Spring Boot 实现文件远程复制和转移
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 实现文件远程复制和转移的更多相关文章
- Apache Camel 与 Spring Boot 集成,通过FTP定时采集、处理文件 (转)
1.概要: 本项目主要是通过在Spring平台上配置Camel.FTP,实现定时从FTP服务器下载文件到本地.解析文件.存入数据库等功能. 2.搭建空项目: Spring Boot有几种自动生成空项目 ...
- Apache Camel,Spring Boot 实现文件复制,转移 (转)
基本框架 Apache Camel Spring Boot Maven 开发过程 1.新建一个POM(quickstart)项目,在POM文件中添加Camel和Spring Boot的依赖 <p ...
- Spring Boot入门——文件上传与下载
1.在pom.xml文件中添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...
- spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)
一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...
- Spring Boot属性文件配置文档(全部)
This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...
- spring 及 spring boot 资源文件配置
Spring配置文件引入xml文件: <import resource=" " />标签使用总结 https://www.cnblogs.com/javahr/p/83 ...
- spring boot实现文件上传下载
spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心.大部分的配置从开发人员可见变成了相对 ...
- 【Spring Boot】Spring Boot之使用Alibaba Cloud Toolkit(Idea插件)本地一键部署Spring Boot项目到远程服务器
一.Alibaba Cloud Toolkit(Idea插件)的安装 1)Alibaba Cloud Toolkit 介绍 Cloud Toolkit 是本地 IDE 插件,帮助开发者更高效地开发.测 ...
随机推荐
- debian下编译安装poco
系统环境: debian版本:Linux localhost.localdomain 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC ...
- python-基础-函数-局部和全局变量
1 函数的定义和调用 1.1 函数定义 1.2 函数的调用 2 函数参数 >>> def fun(a, b, *args, **kwargs): ... ""&q ...
- javascript基础:事件
事件: 概念:某些组件被执行了某些操作后,触发某些代码的执行 * 事件:某些操作,如:单击,双击,键盘按下了,鼠标移动了 * 事件源:组件.如:按钮 文本输入框.... * 监听器:代码 * ...
- (codeforces 853A)Planning 贪心
Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...
- 跟我一起做一个vue的小项目(七)
先看下我们所做项目的效果 这些数据都是我们在data中定义的,不是从后端数据中请求的.那么 接下来我们使用axios渲染数据 npm install axios --save 每个组件里面的数据都不相 ...
- 树hash
判断树的同构,采用树hash的方式. 树hash定义在有根树上.判断无根树同构的时候,可以比较重心为根的hash值或者比较每个点为根的hash值. h[x]表示x为根的子树的hash,g[x]表示x为 ...
- Qt运行不出现界面
安装Qt之后按照例程运行,结果不出现界面,原因是路径中有中文,将中文全部改成英文之后,问题解决.
- alert对象相关问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- springmvc 使用了登录拦截器之后静态资源还是会被拦截的处理办法
解决办法 在拦截器的配置里加上静态资源的处理 参考https://www.jb51.net/article/103704.htm
- day18 12.丢失更新介绍与悲观锁
共享锁在一条记录上是可以加多个的,共享嘛.排它锁的意思是指这条记录上如果有任何其他的锁我排它锁是加不上的,有了排它锁其他锁也是加不上的,唯一的.比如说现在我的记录上没锁,加了排它锁其他人使用不了,我这 ...