目录

  • 工具实现过程记录
    • 背景和目的
    • 基础设计
      • 网盘SDK基础工具
      • 文件模型和网盘模型
      • 配置文件和账号模型
      • 任务模型
    • 初步工作
      • 找到指定目录和读取目录下的文件
      • 如何对比
      • 多任务的调度
    • 改进和细化
      • 多线程池执行任务
      • 内置服务和生产者消费者模式
    • 问题
      • 沟通
      • 调试JNI方法
      • 测试
      • 杂项

工具实现过程记录

最近经理给了我一个任务,公司内部需要一个工具,在Mega网盘和开源的SeaFile网盘(公司内部将SeaFile换了个皮)间实现文件同步。现在记录和复盘一下这一个多月的工作。

背景和目的

公司需要一个工具,每天定个时间在网盘之间同步指定目录下的文件,假设要同步A至B,那么A目录下的所有文件都要同步至B目录,B目录最终的文件要和A同步,如果B目录之前有A目录没有的文件,那么那些文件要删除,可以配置是物理删除还是逻辑删除,逻辑删除就是修改文件名加上“-delete-”标签和时间。
目的是产出一个Spring Boot框架下的定时任务。

基础设计

网盘SDK基础工具

官方SDK提供的网盘基础操作,文件的查找,读取,下载,改名和上传等操作。
Mega网盘官方提供了SDK,基于C++实现,能够对接多种编程语言。
SeaFile则是使用网络请求形式发送命令。

文件模型和网盘模型

为了能在不同类型网盘之间转移文件,需要在网盘模型之上有一个适配各种网盘的模型;同时也要把各种网盘的文件模型包装至统一的模型。

配置文件和账号模型

用json文件记录需要同步的网盘的账号信息,包括网盘类型,用户名,密码,要同步的文件夹,删除类型等。

任务模型

需要进行的操作无非是下载,上传,删除和重命名;包装至一个统一的任务模型中。

初步工作

找到指定目录和读取目录下的文件

根据配置文件中的账号信息指定的目录,找到网盘中的目录,然后读取所有文件,比较直观。

如何对比

判断是不是相同文件,需要带入相对路径进行比较,也就是带入文件在要同步的目录下的相对路径;相对路径相同然后再判断文件名和大小是否相同。

多任务的调度

将任务都放在统一的线程池里面运行。

改进和细化

多线程池执行任务

将下载任务和其他任务分开,因为预计下载和上传操作比较耗时,所以所有的下载操作单独用一个线程池,其他操作用另外一个线程池,防止线程池被耗时操作完全占用的情况。

内置服务和生产者消费者模式

使用几个内置的服务。
1、任务分发服务,将任务分发至不同的线程池。
2、CompleteService,接受多线程任务的执行结果,根据结果来进行下一步操作。
3、生产者消费者模式就是将待处理的任务放置于一个阻塞队列中,然后在一个单独线程中写个死循环读取队列,如果队列没有数据那么线程就会阻塞,这样保证实时异步处理任务。

问题

沟通

沟通真的很重要,因为需求不复杂,所以经理是口头和我讨论需求,说得很随意,他没有完全想明白,我也没听明白,所以每次检查代码的时候总能有些出乎我们意料的事情。
以后讨论需求一定要落实到纸面上,而且一定要设想用户故事,用户是怎样使用工具的,详细的细节,可能情况,前期工作做得越多,后面踩的坑就越少;一定不要因为需求简单就不做这些工作;现实的情况往往细节比想象的多得多。

调试JNI方法

Mega网盘提供了源代码以及编译完成的dll文件和so文件,遇到底层问题或者需要自己做扩展的话,就需要调试了。
参看:https://www.cnblogs.com/yejg1212/archive/2013/06/07/3125392.html

https://aigo.iteye.com/blog/1892546
需要配合C++的IDE来进行调试。

测试

这是关于如何编写单元测试和集成测试的思考。
我参看了阿里巴巴的Java手册和一些专栏,对现有的测试方法不满意,总结了一些教训。
1、基础的单元测试一定要简单,而且有断言。基础的单元测试就是测试一些基础的底层功能,测试方法尽量简单,而且要能重复执行,不需要做太多手工工作;否则后期会在测试方法的准备上做大量重复工作。
2、集成测试,一般是测试一个类的主要功能,那么配合Spring的测试功能可以初始化目的类;要注意的是最好先一个方法一个方法的测试,然后再做整体测试;编写代码的时候就要想到这一点,否则测试时会因为代码过于耦合而过于痛苦,因为问题难定位,而且要注释掉不少代码来解耦。

杂项

1、CommandLineRunner与@Async联合使用时注意

使用CommandLineRunner接口可以在Spring项目启动的时候做一些初始化操作,如果是想在启动时开启子服务,可以使用@Async标签标记异步方法,所标记的异步方法会在一个线程池中执行。

值得注意的是,如果是在CommandLineRunner接口的方法上打上@Async标签,那么接口方法会在主线程中执行一遍然后在转到线程池,如果异步方法耗时较长,可以使用异步方法所在对象实例显式调用一步方法,这样就直接在线程池中异步执行。

记录一次实现网盘间文件同步工具相关推荐

  1. 服务器间文件同步工具Syncthing配置注意点汇总

    1.备份服务器视图说明 2.本地服务器配置 如上图所示,点击右上角操作中的设置,如下图进行设置. 如下图所示,点击"添加文件夹",设置需要备份的本机文件夹. 新增示例如下,&quo ...

  2. 是时候转移百度网盘的文件了 MultCloud 来帮忙

    精选30+云产品,助力企业轻松上云!>>> MultCloud是一款在线服务,可以在一个地方管理众多网盘,支持国产百度盘,最具有特色的地方是你可以直接在 MultCloud 里操作将 ...

  3. python实现百度网盘创建文件夹与转存

    最近学习尝试了一些爬虫的皮毛.前几天又通过jsonup将某个网站的会员视频的百度网盘链接与提取码爬入了数据库中.但是由于视频内容还是比较多的(大概2300个),一个一个地转存入度盘中太过繁琐. 同时不 ...

  4. 4.2w Star的文件同步工具,比VIP网盘还好用!

    关注TJ君,回复"武功秘籍"免费获取计算机宝典书籍 昨天圣诞夜TJ君却做了一件烦心的事情,是什么事情呢? 其实就是TJ君平时有时候会偷懒,把微信当作存储工具,一些小伙伴传过来的文件 ...

  5. 成功解决百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载不下来的问题

    成功解决百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载不下来的问题 目录 解决问题 解决思路 解决方法 解决问题 百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载 ...

  6. ESP8266(ESP模块)Arduino开发环境快速搭建方法--含网盘离线文件

    目录 1. ESP8266简介 1.1 乐鑫ESP8266 1.2 安信可ESP模组 2. ESP8266开发 3. 开发环境搭建 4. 网盘文件离线安装 1. ESP8266简介 1.1 乐鑫ESP ...

  7. 手把手教你轻松下载百度网盘超大文件

    前言 玩过百度网盘的都应该清楚它的强大,小编就是靠着百度网盘那强大的功能以及变态的存储空间才获得许多具有纪念价值的东西,比如某些Hacker资料,你懂的. 但是小编一直以来都有一个心结未解开,那就是为 ...

  8. 一键导出百度网盘群文件

    你有没有遇到过朋友给你分享资源的场景,一般人都有过,绝大部分场景下,我们直接转存就好了,但是也有少数情况下我们发现处于诸多限制,比如自己网盘容量太低或者是别人分享的内容太多,导致我们没有办法一次保存下 ...

  9. 百度网盘下载文件教程

    下载一些比较大的文件基本上都是通过网盘客户端,百度网盘还是比较普遍的,但是有很多网友不知道怎么操作,小编这就告诉朋友们怎么使用百度网盘下载文件. 1.首先将下载的百度网盘链接地址复制下来.打开电脑的浏 ...

最新文章

  1. Decorator 装饰器模式 -动态组合
  2. CVE-2019-14287(sudo提权)
  3. python from __future__ import division
  4. 简单粗暴 我再送一波教程资料,Vue、大数据、AI都有
  5. 经典水墨素材点缀中国风海报|简约国际范
  6. HNOI2019 退役记
  7. 夏日葵电商:从5大方面谈微信商城怎样提高用户体验度
  8. Linux面试题整理
  9. exchange 2010高可用平台的搭建和配置
  10. 计算机基础-初步认识软件和硬件
  11. 设计分享 | STM32F103RCT6利用ULN2003驱动步进电机正反转
  12. Oracle 同比环比
  13. 4.(地图数据篇)nginx代理地图服务--离线部署地图服务
  14. 读史笔记(I) 日光之下
  15. 走进Linux 操作系统(之一)
  16. 失传万年的PS合成进阶宝典(一)
  17. 【C语言笔记】【宏定义系列】 向下舍入到指定数值的倍数
  18. 2020除了宝塔面板还有哪些好用的服务器管理软件?
  19. Pagerduty - prometheus - grafana测试告警的使用方法
  20. 初学者也能轻松做出好Beat——FL Studio FPC鼓机使用教程

热门文章

  1. 女孩子转数据分析难吗?难在哪里?
  2. 行业研究报告-全球与中国办公室隔板市场现状及未来发展趋势
  3. rust怎么传送坐标_魔兽世界太阳龙宠物怎么获得_WOW太阳龙宠物获得方法
  4. 迪赛智慧数——文字(文本墙):80后儿童时期风靡的25种玩具
  5. 马尔科夫模型在Gowalla数据集下的简单实践
  6. Smart3D/ContextCapture(CC)第一遍空三处理失败failed to lock a file
  7. performSelector系列方法的研究
  8. iOS performSelector方法总结
  9. 从0到1学习CTF WEB
  10. 第十八天:WEB攻防-ASP安全MDB下载植入IIS短文件名写权限解析