springboot2.1.3配置sftp⾃定义sftp连接池的详细过程项⽬地址
maven:
<!-- sftp -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
<!-- commons-pool2 -->
<dependency>
<groupId>s</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.1</version>
</dependency>
sftp:
host: rver02 # 服务器ip
port: 22 # ssh端⼝
urname: demofile # ⽤户名
password: demo # 密码
# 连接池参数
pool:
max-total: 10
max-idle: 10
min-idle: 5
SftpProperties
ample.ftp;
import com.jcraft.jsch.ChannelSftp;
import lombok.Data;
import s.pool2.impl.GenericObjectPoolConfig;
import org.t.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "sftp")
public class SftpProperties {
private String host;
private int port = 22;
private String urname = "root";
private String password = "root";
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();
}
@Override
public int getMaxTotal() {
return maxTotal;
}
@Override
public void tMaxTotal(int maxTotal) {
this.maxTotal = maxTotal;
}
@Override
public int getMaxIdle() {
return maxIdle;
}
@Override
public void tMaxIdle(int maxIdle) {
this.maxIdle = maxIdle;
}
@Override
public int getMinIdle() {
return minIdle;
}
@Override
public void tMinIdle(int minIdle) {
this.minIdle = minIdle;
}
}
}
sftp连接⼯⼚
ample.ftp;
ption.ProjectException;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
漠然的意思
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import lombok.Data;
slf4j.Slf4j;
import s.pool2.BaPooledObjectFactory;
import s.pool2.PooledObject;
import s.pool2.impl.DefaultPooledObject;
import java.util.Properties;
@Data
@Slf4j
public class SftpFactory extends BaPooledObjectFactory<ChannelSftp> {
private SftpProperties properties;
public SftpFactory(SftpProperties properties) {
幸福其实很简单this.properties = properties;
}
villager
@Override
public ChannelSftp create() {
try {
JSch jsch = new JSch();
Session sshSession = Urname(), Host(), Port()); sshSession.Password());
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.tConfig(sshConfig);
ChannelSftp channel = (ChannelSftp) sshSession.openChannel("sftp");
return channel;
} catch (JSchException e) {
throw new ProjectException("连接sfpt失败", e);
}
}
@Override
public PooledObject<ChannelSftp> wrap(ChannelSftp channelSftp) {
return new DefaultPooledObject<>(channelSftp);
}
// 销毁对象
@Override
public void destroyObject(PooledObject<ChannelSftp> p) {
ChannelSftp channelSftp = p.getObject();
channelSftp.disconnect();
}
}
sftp连接池
ample.ftp;
ption.ProjectException;
import com.jcraft.jsch.ChannelSftp;
import lombok.Data;
import s.pool2.impl.GenericObjectPool;
@Data
public class SftpPool {
private GenericObjectPool<ChannelSftp> pool;
2013年六级成绩查询public SftpPool(SftpFactory factory) {
this.pool = new GenericObjectPool<>(factory, Properties().getPool()); }
/**
* 获取⼀个sftp连接对象
* @return sftp连接对象
*/
public ChannelSftp borrowObject() {
try {
return pool.borrowObject();
} catch (Exception e) {
throw new ProjectException("获取ftp连接失败", e);
}
}
/**
* 归还⼀个sftp连接对象
* @param channelSftp sftp连接对象
*/
public void returnObject(ChannelSftp channelSftp) {
if (channelSftp!=null) {
}
}
}
sftp辅助类
ample.ftp;
ption.ProjectException;
ample.util.ByteUtil;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.SftpException;
import java.io.InputStream;
// sftp辅助类
public class SftpHelper {
private SftpPool pool;
public SftpHelper(SftpPool pool) {
this.pool = pool;
}
/**
* 下载⽂件
* @param dir 远程⽬录
* @param name 远程⽂件名
* @return ⽂件字节数组
*/
public byte[] download(String dir, String name) {
ChannelSftp sftp = pool.borrowObject();
try {
sftp.cd(dir);
InputStream in = (name);
return ByteUtil.inputStreamToByteArray(in);
} catch (SftpException e) {
throw new ProjectException("sftp下载⽂件出错", e);
} finally {
}
/**
* 上传⽂件
* @param dir 远程⽬录
* @param name 远程⽂件名
* @param in 输⼊流
*/
public void upload(String dir, String name, InputStream in) {
ChannelSftp sftp = pool.borrowObject();
try {
mkdirs(sftp, dir);
sftp.cd(dir);
sftp.put(in, name);
} catch (SftpException e) {
throw new ProjectException("sftp上传⽂件出错", e);
} finally {
猴子捞月英文
}
}
/**
* 删除⽂件
* @param dir 远程⽬录
* @param name 远程⽂件名
*/
public void delete(String dir, String name) {
ChannelSftp sftp = pool.borrowObject();
try {
follow your heartsftp.cd(dir);
<(name);
} catch (SftpException e) {
throw new ProjectException("sftp删除⽂件出错", e);
} finally {
}
}
/**
* 递归创建多级⽬录
* @param dir 多级⽬录
*/
private void mkdirs(ChannelSftp sftp, String dir) {
主板英文
String[] folders = dir.split("/");
try {
sftp.cd("/");
for (String folder: folders) {
if (folder.length()>0) {
try {
sftp.cd(folder);
} catch (Exception e) {
sftp.mkdir(folder);
sftp.cd(folder);
}
}
}
} catch (SftpException e) {
throw new ProjectException("sftp创建⽬录出错", e);
}
}straightedge
}
主配置类
fig;
ample.ftp.SftpFactory;
ample.ftp.SftpHelper;
ample.ftp.SftpPool;
ample.ftp.SftpProperties;
import org.t.properties.EnableConfigurationProperties; import t.annotation.Bean;
import t.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(SftpProperties.class)
public class SftpConfig {cbz
// ⼯⼚
女户@Bean
public SftpFactory sftpFactory(SftpProperties properties) {
return new SftpFactory(properties);
}
// 连接池
@Bean
public SftpPool sftpPool(SftpFactory sftpFactory) {
return new SftpPool(sftpFactory);
}
// 辅助类
@Bean
public SftpHelper sftpHelper(SftpPool sftpPool) {
return new SftpHelper(sftpPool);
}
}
使⽤⽅法
@Autowired
private SftpHelper sftpHelper;
注⼊辅助类,直接调⽤⽅法即可。
到此这篇关于springboot2.1.3配置sftp⾃定义sftp连接池的⽂章就介绍到这了,更多相关springboot⾃定义sftp连接池内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!