开发目的:使用FTP连接池来管理FTP连接,以避免不断的连接FTP造成性能下降。
1、FTP连接池,建立一个java类FtpConnectionPooling:
package com.dripstone.ftp; import java.util.concurrent.BlockingQueue; import java.util.concurrent.PriorityBlockingQueue; /** * <br>Title:FTP连接池 * <br>Description:FTP连接池及FTP连接池相应的操作 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 */ public abstract class FtpConnectionPooling { private static BlockingQueue<FtpClient> fqueue; private static FtpClientInfo ftpClientInfo; /** * <br>Description:初始化连接池 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @param ftpClientInfo */ public static void init(FtpClientInfo info) { ftpClientInfo = info; fqueue = new PriorityBlockingQueue<FtpClient>(ftpClientInfo.getMaxConnects(), new FtpClientComparator());// 初始化队列容量 FtpClient ftpClient; for (int i = 0; i < ftpClientInfo.getMaxConnects(); i++) { ftpClient = new FtpClient(); ftpClient.order = i; fqueue.add(ftpClient); } } public static FtpClientInfo getFtpClientInfo() { return ftpClientInfo; } /** * <br>Description:向线程池中添加FTPClient * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @param ftpClient */ public static boolean add(FtpClient ftpClient) { boolean b = fqueue.contains(ftpClient); if (!b) return fqueue.add(ftpClient); return true; } /** * <br>Description:获取FTPClient,如果线程池为空,则等待到FtpClientInfo中所设置的超时时间 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @return * @throws InterruptedException */ public static FtpClient poll() throws InterruptedException { return fqueue.poll(ftpClientInfo.getTimeout(), ftpClientInfo.getTimeUnit()); } /** * <br>Description:获取FTPClient,如果线程池为空,则一直等待。 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @return * @throws InterruptedException */ public static FtpClient take() throws InterruptedException { return fqueue.take(); } }
2、FtpClientProxy类
package com.dripstone.ftp; import java.io.IOException; import java.io.InputStream; import java.net.SocketException; import org.apache.commons.net.ftp.FTPClient; /** * <br>Title:FTPClient代理类 * <br>Description:负责FTPClient功能的代理 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 */ public class FtpClientProxy { private FtpClient ftpClient; public FtpClientProxy() throws InterruptedException, SocketException, IOException { ftpClient = FtpConnectionPooling.poll(); if (!ftpClient.isConnected()) { FtpClientInfo info = FtpConnectionPooling.getFtpClientInfo();// 获取ftpClient信息 ftpClient.connect(info.getFtpIp(), info.getFtpPort());// 连接 ftpClient.login(info.getFtpUserName(), info.getFtpPassword());// 登陆 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 设置为二进制 } } /** * <br>Description:释放ftpClient * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @return */ public boolean release() { if (ftpClient == null) return true; boolean b = FtpConnectionPooling.add(ftpClient); if (b) ftpClient = null; return b; } /** * <br>Description:下载文件 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @param fileName * @return * @throws IOException */ public InputStream retrieveFileStream(String remote) throws IOException { return ftpClient.retrieveFileStream(remote); } /** * <br>Description:上传文件 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @param remote * @param local * @return * @throws IOException */ public boolean storeFile(String remote, InputStream local) throws IOException { return ftpClient.storeFile(remote, local); } /** * <br>Description:获取本地端口 * <br>Author:张智研(zhangzhiyan@neusoft.com) * <br>Date:2013-7-4 * @return */ public int getLocalPort() { return ftpClient.getLocalPort(); } }
3、FtpClient类
相关推荐
其实ftp连接池跟数据库连接池的原理是差不多的,不同的是ftp连接池有个连接时间的限制,如果你没设置的话,它的默认连接服务器的时间是0,所以我们要合理的设置它的服务器的时间,ftp.setConnectTimeout(5000);...
使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...
在网上找了好久没有现成的ftp连接池jar包,自己花了一些时间实现了一个简单的连接池,用了一段时间稳定性还可以。
springboot集成ftp连接池工具,很好的解决了并发大用户上传附件慢的问题
基于SpringBoot搭建 使用apache的commons-pool2 构建 FTPClient连接池 有FtpClientFactory、FtpClientPool、FtpConfig、...还有ftp连接池的一些配置参数信息在ftp.properties文件中 注释完整欢迎大家下载使用
NULL 博文链接:https://log-cd.iteye.com/blog/1886142
1 博文链接:https://bai2mumu.iteye.com/blog/2231916
包含java ftp服务器端源程序。对初学很有用
主要介绍了Spring Boot整合FTPClient线程池的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ftp连接池java实现,使用方法可看我的博客介绍,通过配置xml文件和配置一个FtpConfig就可以使用 https://blog.csdn.net/weixin_37817685/article/details/106744551
以下是一些值得注意的软件包亮点: 用于并行传输/遍历的连接池。 自动恢复插补的文件传输。 显式和隐式FTPS支持(仅TLS,无SSL)。 IPv6支持。 针对pure-ftpd和proftpd运行的合理的良好自动化测试。 请参阅godocs...
java动态代理实现数据库连接池的详细原理讲解
主要介绍了Java FTPClient连接池的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
易语言FTP管理源码系统结构:连接FTP,取FTP文件,加逗号,取文件后缀,日志,加入日志,简化时间,取上级目录,取本地上级目录,枚举驱动器,浏览文件,清空FTP目录,FTP下载文件,FTP路径替换,执行列
### 一. 连接池概述 ...每次访问只需从连接池里获取连接,使用完毕后再放回连接池,并不是直接关闭连接, 这样可以保证程序重复使用同一个连接而不需要每次访问都建立和关闭连接, 从而提高系统性能。
点击打开连接框下面的本地主机主页,然后可以看到应用程序池和网站选项,我们右键点击网站选择添加网站。然后在弹出的添加网站框里面输入我们的网站名称,物理路径也就是我们的FTP本地文件夹,我们可以在磁盘里面...
sftp 命令可以通过 ssh 来上传和下载文件,是常用的文件传输工具,它的使用方式与 ftp 类似,但它使用 ssh 作为底层传输协议,所以安全性比 ftp 要好得多。 常用方式 格式:sftp 通过 sftp 连接 ,端口为默认的 ...
本程序是在原有基础上逐步完善的,第一版:http://download.csdn.net/detail/zpwmhx/4342943 第二版:http://download.csdn.net/detail/zpwmhx/4505209 ...本程序很适合在主机间批量传输文件和目录,参数可控
rewin.zwgtools.code....读写xml文档,图片管理,Ftp管理,可以和一个Ftp服务端建立连接实现文件的上传下载,TSF服务提供,两个数据库连接池管理,Socket连接池的管理,等等,皆在为开发人员提供高度集成的开发工具。