Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

me.meilon.sftp:sftp-pool

Package Overview
Maintainers
1
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

me.meilon.sftp:sftp-pool

一款基于 apache commons-pool2 和 jsch 实现的 sftp 连接池

  • 0.0.6
  • Source
  • Maven

Version published
Maintainers
1
Source

sftp-pool

https://github.com/meilonme/sftp-pool

一款基于apache commons-pool2 sftp 连接池

jsftp-spring-boot-starter

spring-boot 项目引入

<dependency>
    <groupId>me.meilon.jsftp</groupId>
    <artifactId>jsftp-spring-boot-starter</artifactId>
    <version>${最新稳定版本}</version>
</dependency>

引入 jsftp-spring-boot-starter 后, 启动项目会自动加载配置;

application.yml 配置样例

sftp-pool:
  # 获取资源的等待时间。blockWhenExhausted 为 true 时有效。-1 代表无时间限制,一直阻塞直到有可用的资源
  maxWaitMillis: -1
  # 每个key最小保持的空闲链接数, 默认 1
  minIdlePerKey: 1
  # 每个key最大保持的空闲链接数, 默认 8
  maxIdlePerKey: 8
  # 每个key最大可存在的链接数, 默认 8
  maxTotalPerKey: 8
  # 对象空闲的最小时间,达到此值后空闲对象将可能会被移除。
  #不受最小连接数限制影响
  # -1 表示不移除;默认 30 分钟
  minEvictableIdleTimeMillis: 180000
  #连接空闲的最小时间,达到此值后空闲链接将会被移除,
  #但会保留最小空闲连接数
  #默认为-1.
  softMinEvictableIdleTimeMillis: -1
  # “空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。
  # 默认值 -1L
  timeBetweenEvictionRunsMillis: -1
  # 资源耗尽时,是否阻塞等待获取资源,默认 true
  blockWhenExhausted: true
  connConfigs:
    sftp1:
      host: 192.168.1.121
      port: 22
      userName: root
      password: root
      # 是否自动关闭
      autoDisconnect: false
    sftp2:
      host: 192.168.1.122
      port: 22
      userName: root
      password: root

jsftpClient

使用 jsftpClient 会自动从链接池获取 sftp 链接, 使用完毕后自动交还给连接池; 因此可以避免链接忘记关闭的情况;

<dependency>
    <groupId>me.meilon.jsftp</groupId>
    <artifactId>jsftp-pool-client</artifactId>
    <version>${最新稳定版本}</version>
</dependency>

jsftpClient 提供了两个函数式调用的 run 方法; 用户也可以继承 JsftpClient 进行扩展;

jsftpClient 使用样例;

有返回值的调用

JsftpClientFactory jsftpClientFactory = new JsftpClientFactory();
JsftpClient client = jsftpClientFactory.createSftpClient(host,port,username,password);
List<String> fileNames = client.run(sftp ->{
    String homeBath = sftp.getHome();
    return sftp.listFileNames(homeBath);
});

无返回值的调用

JsftpClientFactory jsftpClientFactory = new JsftpClientFactory();
JsftpClient client = jsftpClientFactory.createSftpClient(host,port,username,password);
client.run(sftp ->{
    String homeBath = sftp.getHome();
    sftp.cd(homeBath);
});

sftp-pool-core

基于 maven 引入 sftp-pool-core

<dependency>
    <groupId>me.meilon.jsftp</groupId>
    <artifactId>sftp-pool-core</artifactId>
    <version>${最新稳定版本}</version>
</dependency>

sftp-pool-core 提供了基础的sftpi链接池功能;

使用 sftp-pool-core 用户需要自行初始化链接池工厂 SftpPooledFactory;

使用 SftpPooledFactory getSftpPool() 方法获取链接池(使用懒加载模式, 首次获取链接池时自动初始化链接池);

使用 SftpPooledFactory setSftpConnConfig() 方法设置一个SFTP链接配置. 可以设置多个SFTP链接配置, SftpPooledFactory 会根据 sftpId 分配到不同的池里

样例: 初始化链接池

    // 创建链接池工厂
    SftpPooledFactory factory = new SftpPooledFactory();

    // 设置SFTP链接配置
    String sftpId = "sftp1";
    String host = "127.0.0.1";
    int port = 22;
    String username = "user";
    String password = "psw";
    factory.setSftpConnConfig(host,port, username, password,sftpId,false);
    
    // 可设置多个SFTP链接配置, SftpPooledFactory 会根据 sftpId 分配到不同的池里
    String sftpId2 = "sftp2";
    String host2 = "127.0.0.1";
    int port2 = 22;
    String username2 = "user";
    String password2 = "psw";
    factory.setSftpConnConfig(host2,port2, username2, password2,sftpId2,false);

使用 SftpPool borrowObject() 方法获取一个SFTP链接, 需要前面设置SFTP链接配置对应的 sftpId 作为入参

SftpConnect 实现了Closeable接口, 推荐使用自动关闭; 当然也可以手动调用 SftpConnect 的 close() 方法以归还 SFTP 链接回链接池;

样例: 业务代码中使用链接池获取SFTP链接;

    String sftpId = "sftp1";

    // 通过 SftpPooledFactory 获取链接池
    SftpPool pool = factory.getSftpPool();
    
    // 通过连接池的 borrowObject 方法获取SFTP链接
    try (SftpConnect sftp = pool.borrowObject(sftpId)){
        List<ChannelSftp.LsEntry> files =  sftp.listFiles("/data/");
        for (ChannelSftp.LsEntry file : files) {
            System.out.println(file.getFilename());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

SftpPooledFactory 有一个静态方法 createConnect() 可用于创建一个SFTP链接;

需要注意的是, 使用此方法创建的链接不会被纳管到链接池, 当你调用 SftpConnect 的 close() 方法时, 该链接不会被返还到链接池中, 而是直接关闭此链接;

    String host = "127.0.0.1";
    int port = 22;
    String username = "user";
    String password = "psw";
    SftpConnect sftp = SftpPooledFactory.createConnect(host,port, username, password);

FAQs

Package last updated on 15 Jan 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc