基于 Apache Commons Pool2 和 Hutool 的 FTP 工具类封装 FTP 连接池
一、主要思路
Apache Commons Pool2 提供了两个方便创建通用对象池的类
- 池化对象工厂类:
BasePooledObjectFactory<T>
我们只需要继承这个类,然后补充出创建池化对象的方法,以及完善对象销毁、对象验证这些方法即可 - 通用对象池类:
GenericObjectPool<T>
这个类可以与 BasePooledObjectFactory
搭配使用,我们给出 factory 实例对象和对象池的配置信息,即可完成对象池的创建
我们的目标就是把 Ftp 连接对象进行池化,并且保证连接池中对象的连接有效性,就完成了 FTP 连接池的封装。
完整代码:https://github.com/hczs/springboot3-ftp-pool
二、具体实现
2.1 准备 FTP 环境
直接用 docker 启动,注意修改挂载目录为自己的机器目录
2.2 创建 SpringBoot 项目,引入必要依赖
- lombok 保持代码整洁性
- hutool-extra 和 commons-net 提供 FTP 连接封装相关
- commons-pool2 池化工具包
完整依赖信息如下:
2.3 FTP 对象工厂类
主要完善对象创建方法 create
对象销毁方法 destroyObject
和对象有效性验证方法 validateObject
2.4 FTP 连接池初始化创建
这个类主要是做连接池的初始配置和初始化创建操作,并且提供给外部连接池对象使用,连接池的配置可以抽出做外部配置,此处直接配到这里了。
注意,此处的预先初始化连接池是异步的,可以根据实际需求修改为同步。
2.5 FTP 工具类
这个类是给外部使用的,提供基础的文件上传下载方法,后续需要什么可以进行扩充,并且里面的方法操作都是基于连接池中的 FTP 对象操作的,节省了创建连接的网络开销。
2.6 具体使用
配置 ftp 连接信息
直接注入 FtpTemplate
对象即可
调用文件上传下载方法进行验证