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

hutool工具并发使用 Sftp sftp = new Sftp(sshHost, sshPort, sshUser, sshPass) 的坑

目录

  • 问题描述
  • 解决方案
  • Sftp(sshHost, sshPort, sshUser, sshPass) 分析
  • Sftp(Session session) 分析
  • 吐槽
  • 另外还有一坑 delFile(String filePath)

问题描述

看到前人的代码中使用 Sftp sftp = new Sftp(sshHost, sshPort, sshUser, sshPass) ; 来创建一个Sftp客户端,然后照样也用了它,在测试时发现跑着跑着突然出现了问题,就连简单的创建目录(sftp.mkDirs(path))都不行了,经过一翻折腾,发现有多个调度使用了 Sftp sftp = new Sftp(sshHost, sshPort, sshUser, sshPass) ; 问题就出在这里,在创建Sftp客户端时 Session 默认是单例的,在并发创建Sftp时,只要其中一个线程执行完后调用sftp.close();关闭资源时,Session 也就关闭了,由于是单例的,其他线程创建的Sftp也就挂了;所以当有多个线程使用Sftp时,Session最好是多例的,这样单个关闭也不会影响到其他的;

解决方案

Sftp sftp = new Sftp(sshHost, sshPort, sshUser, sshPass);
换成 ↓
Sftp sftp = new Sftp(JschUtil.openSession(sshHost, sshPort, sshUser, sshPass));

Sftp(sshHost, sshPort, sshUser, sshPass) 分析

会重用已经存在的Session
在这里插入图片描述
在这里插入图片描述

Sftp(Session session) 分析

你自己传一个Session过去,随便你是新的还是老的,JschUtil工具类还有其他一些创建Session的方法
在这里插入图片描述
在这里插入图片描述

吐槽

hutool的Sftp类应该再提供一个构造方法出来,多加一个Session的模式参数,让使用者根据自己的需求来传,这样就不会等出问题了再去看源码才发现问题所在
在这里插入图片描述

另外还有一坑 delFile(String filePath)

在删除一个有多个层级文件时,只要其中有一个目录不存在,就会抛异常了

相关文章:

  • 一站式服务中心/seo 360
  • 电子商务网站建设与全程实例/网站建设平台有哪些
  • 成都找人做网站/上海网络seo公司
  • 怎么做时时彩网站平台/公司宣传网页怎么做
  • wordpress 熊掌号代码/seo培训班 有用吗
  • 用虚拟主机好还是阿里云wordpress/google网站搜索
  • 【图像处理】基于二维FIR的特定角度边缘检测(Matlab代码实现)
  • 麒麟水乡,IU酒店进驻云南旅游咽喉之地曲靖
  • 花房集团上市,走向元宇宙新征程
  • Symfony3.4 如何自定义编写Twig扩展
  • 基于HOG、LBP完成特征工程,基于SVM/RF/XGBOOST/GBDT/CNN/DNN完成人脸识别+表情识别
  • HTTP权威指南------URL与资源
  • 算法| Java的int类型最大值为什么是21亿多?
  • 【每日一题Day64】LC1799N 次操作后的最大分数和 | 状态压缩dp 状态压缩+dfs+记忆化搜索
  • C语言重点解剖预处理要点速记
  • vue-elementUI后台管理系统,已实现用户管理、菜单管理、角色管理、公司管理、权限管理、支付管理等
  • 数字ic验证|SoC的功能验证
  • Godzilla(哥斯拉)安装与使用