sftp-pool

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

License

License

Categories

Categories

Jakarta Server Faces Jakarta EE The Web Tier
GroupId

GroupId

me.meilon.jsftp
ArtifactId

ArtifactId

sftp-pool
Last Version

Last Version

0.1.3
Release Date

Release Date

Type

Type

pom
Description

Description

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

Project URL

https://github.com/meilonme/sftp-pool
Source Code Management

Source Code Management

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

Download sftp-pool

Filename Size
sftp-pool-0.1.3.pom 8 KB
Browse

How to add to project

<!-- https://jarcasting.com/artifacts/me.meilon.jsftp/sftp-pool/ -->
<dependency>
    <groupId>me.meilon.jsftp</groupId>
    <artifactId>sftp-pool</artifactId>
    <version>0.1.3</version>
    <type>pom</type>
</dependency>
// https://jarcasting.com/artifacts/me.meilon.jsftp/sftp-pool/
implementation 'me.meilon.jsftp:sftp-pool:0.1.3'
// https://jarcasting.com/artifacts/me.meilon.jsftp/sftp-pool/
implementation ("me.meilon.jsftp:sftp-pool:0.1.3")
'me.meilon.jsftp:sftp-pool:pom:0.1.3'
<dependency org="me.meilon.jsftp" name="sftp-pool" rev="0.1.3">
  <artifact name="sftp-pool" type="pom" />
</dependency>
@Grapes(
@Grab(group='me.meilon.jsftp', module='sftp-pool', version='0.1.3')
)
libraryDependencies += "me.meilon.jsftp" % "sftp-pool" % "0.1.3"
[me.meilon.jsftp/sftp-pool "0.1.3"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

  • sftp-pool-core
  • sftp-pool-client

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>0.1.15</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 链接, 使用完毕后自动交还给连接池; 因此可以避免链接忘记关闭的情况;

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

非 spring boot 项目可以直接引入 sftp-pool-core

<dependency>
  <groupId>me.meilon.sftp</groupId>
  <artifactId>sftp-pool-core</artifactId>
    <version>0.1.15</version>
</dependency>

通过连接池创建一个sftp链接

    String sftpId = "sftp1";
    SftpPooledFactory factory = new SftpPooledFactory();
    SftpPool pool = factory.createSftpPool();
    factory.setSftpConnConfig(host,port, username, password,sftpId,false);
    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();
    }

Versions

Version
0.1.3