当前位置: 首页 > news >正文

sftp做成一个池子

前言:开发中的需求要去对方的 ftp 服务器下载文件,这里下载文件采用 ftp 方式,下载之后程序再去解析文件的内容,然后再存数据库。下载过来的文件默认是 zip 格式,需要解压 unzip 一下,然后里面有一个 csv 文件,用 easyecel 读取 csv 中的数据,至此需求梳理完成。这里每次取下载或者操作 ftp 的时候都要新建一个连接,用完再主动关闭,这里并未复用此连接,相当于说每次都是新建一个连接,这样不好,因此对这里进行设计改造。

引入 pom 依赖

        <!-- SFTP --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency><!-- commons-pool2 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.1</version></dependency>

定义yml文件配置信息

sftp:mft:sftp-host: 101.233.389.58sftp-port: 80219sftp-username: usersftp-password: 789678sftp-path: /file/mftsave-path: /mftpool:max-total: 10max-idle: 10min-idle: 5

定义配置属性SftpProperties 信息

读取yml中的属性信息,注意@ConfigurationProperties(prefix = "sftp.mft")注解是定义属性,下面的
sftpHost属性就读取到了yml文件中配置的信息,但是类中的maxTotal和yml文件中的max-total是怎么映射的呢?注意看yml中有一个pool下面 类中有一个private Pool pool = new Pool();pool改个名字就从yml文件点不进来了,说明是根据此来映射的

package x.x.config.sftpPool;import com.jcraft.jsch.ChannelSftp;
import lombok.Data;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.boot.context.properties.ConfigurationProperties;@Data
@ConfigurationProperties(prefix = "sftp.mft")
public class SftpProperties {private String sftpHost;private int sftpPort;private String sftpUsername;private String sftpPassword;private String sftpPath;private String savePath;private Pool pool = new Pool();public static class Pool extends GenericObjectPoolConfig<ChannelSftp> {private int maxTotal = DEFAULT_MAX_TOTAL;private int maxIdle = DEFAULT_MAX_IDLE;private int minIdle = DEFAULT_MIN_IDLE;public Pool() {super();}@Overridepublic int getMaxTotal() {return maxTotal;}@Overridepublic void setMaxTotal(int maxTotal) {this.maxTotal = maxTotal;}@Overridepublic int getMaxIdle() {return maxIdle;}@Overridepublic void setMaxIdle(int maxIdle) {this.maxIdle = maxIdle;}@Overridepublic int getMinIdle() {return minIdle;}@Overridepublic void setMinIdle(int minIdle) {this.minIdle = minIdle;}}
}

定义工厂类

生产sftp连接,获取上一步定义好的属性 SftpProperties 实现三个方法,create方法创建连接

package x.x.config.sftpPool;import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import<

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 区块链如何助力数字版权保护和内容创作者的权益?
  • linux nicstat
  • Linux 照片图像编辑器
  • 土木工程学报
  • uniapp HarmonyOS项目实战
  • Android图像显示SurfaceFlinger总结
  • 【数据结构初阶】二叉树与堆(一)
  • 【CN】Argo 持续集成和交付(二)
  • 为什么要设置 os.environ[“PYTHONHASHSEED“] = “0“,这样做具体会影响哪些随机值?
  • 观察者模式(Observer Pattern)
  • C# 设计模式之桥接模式
  • 新质生产力
  • PHP中如何定义常量以及常量和变量的主要区别
  • 海思35XX系列(三)sensor(传感器)
  • VUE框架面试整理-模板语法
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Asm.js的简单介绍
  • Git初体验
  • Laravel 实践之路: 数据库迁移与数据填充
  • LintCode 31. partitionArray 数组划分
  • MySQL-事务管理(基础)
  • Sublime text 3 3103 注册码
  • 初识 webpack
  • 技术胖1-4季视频复习— (看视频笔记)
  • 力扣(LeetCode)21
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何进阶一名有竞争力的程序员?
  • 入手阿里云新服务器的部署NODE
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 手写双向链表LinkedList的几个常用功能
  • 手写一个CommonJS打包工具(一)
  • ionic异常记录
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (9)STL算法之逆转旋转
  • (ibm)Java 语言的 XPath API
  • (Python) SOAP Web Service (HTTP POST)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (分享)自己整理的一些简单awk实用语句
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (七)Flink Watermark
  • (十三)Flask之特殊装饰器详解
  • .aanva
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .CSS-hover 的解释
  • .net 4.0发布后不能正常显示图片问题
  • .net core docker部署教程和细节问题
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Standard 的管理策略
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 表达式计算:Expression Evaluator
  • // an array of int
  • @column注解_MyBatis注解开发 -MyBatis(15)