新闻资讯

如何快速实现一个ftp连接池?如何用花生壳实现ftp服务

2022-04-19

在实际工作中,我们经常会用到各种连接池,例如:连接 FTP 服务器的连接数有限,需要建立一个连接池;连接数据库的连接数有限,需要建立一个连接池。那我们如何去快速实现一个连接池呢?

如何快速实现一个ftp连接池?

类似数据库连接,ftp连接也是一个比较浪费时间的连接,为了高效快速获取连接,对连接数量和资源进行有效管理,引入了连接池比较合理。
实现一个ftp连接池,工程已经压缩成jar,需要使用直接下载即可,相关ftp的jar包已经封装在jar中,提供了常用ftp操作方法在FTPUtils,和文件留痕处理的FileUtils。
jar下载地址:https://download.csdn.net/download/weixin_37817685/12521927
引入上述的jar包后,手动配置下面几步就可以使用了。
使用步骤:

1.application.properties配置ftp连接信息

ftp.host=xxxxxx
ftp.port=xxx
ftp.username=xxxx
ftp.password=xxxx
ftp.encoding=UTF-8
ftp.passiveMode=true
ftp.clientTimeout=30000
ftp.bufferSize=1024
ftp.transferFileType=2
ftp.maxIdle=62
ftp.maxTotal=93
ftp.maxWaitMillis=1000
ftp.initIdle=10

2.配置ftp-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<bean id="ftpPoolConfig" class="com.yueli.FtpPool.config.FtpPoolConfig"> <!-- 允许最大的空闲连接数量,如果超过最大值,放回连接池的连接直接被销毁 默认62--> <property name="maxIdle" value="${ftp.maxIdle}" /> <!-- 初始化的连接数量 默认31 --> <property name="initIdle" value="${ftp.initIdle}" /> <!-- 允许创建的最大连接数量 默认93--> <property name="maxTotal" value="${ftp.maxTotal}" /> <!-- 从连接池获取连接失败时等待的最长时间 单位毫秒 默认3000--> <property name="maxWaitMillis" value="${ftp.maxWaitMillis}" /> </bean> <bean id="ftpClientConfig" class="com.yueli.FtpPool.config.FtpClientConfig"> <property name="host" value="${ftp.host}" /> <property name="port" value="${ftp.port}" /> <property name="password" value="${ftp.password}" /> <property name="username" value="${ftp.username}" /> <!-- ftp的编码设置。默认UTF-8 --> <property name="encoding" value="${ftp.encoding}" /> <!-- 服务端是否被动。默认true 可自行连接主动和被动两种差别 --> <property name="passiveMode" value="${ftp.passiveMode}" /> <!-- 客户端连接ftp超时时间 默认30000 --> <property name="clientTimeout" value="${ftp.clientTimeout}" /> <!-- 缓冲大小 默认1024 --> <property name="bufferSize" value="${ftp.bufferSize}" /> <property name="transferFileType" value="${ftp.transferFileType}" /> </bean> <bean id="ftpConnectionFactory" class="com.yueli.FtpPool.ftp.FtpClientFactory"> <property name="ftpClientConfig" ref="ftpClientConfig" /> </bean> <bean id="ftpManager" class="com.yueli.FtpPool.ftp.FtpManager"> <property name="ftpPoolConfig" ref="ftpPoolConfig" /> <property name="factory" ref="ftpConnectionFactory" /> </bean>

3.配置ftpConfig读取xml

import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.stereotype.Component;

import com.yueli.FtpPool.ftp.FtpManager;

@Configuration
@ImportResource("classpath:ftp-config.xml")
@Component
public class FtpConfig {

private static final Logger LOG = LogManager.getLogger(FtpManager.class);

/**

  • 获取ftpClient
  • @return
    */
    public FTPClient getFTPClient() {
    Exception ex = null;
    FTPClient ftpClient = FtpManager.getFTPClient();
    if (ftpClient == null) {
    LOG.error("ftpClient error: Could not get a ftpClient from the pool! " + ex);
    }
    return ftpClient;
    }

/**

  • 释放ftpClient
    */
    public void releaseFtpClient(FTPClient ftpClient) {
    if (ftpClient == null) {
    return;
    }
    FtpManager.releaseFtpClient(ftpClient);
    }

}
4.再要使用的地方注入下面这句,就可以获取ftp释放ftp连接。如果自己重写操作ftp的方法,获取到连接操作完相关业务后需要手动调用releaseFtpClient释放,如果直接调用FTPUtils中的方法可不用再手动释放,释放代码已经封装在方法内了。
@Autowired
private FtpConfig ftpConfig;

如何用花生壳实现ftp服务

说到利用花生壳搭建ftp服务,要从下载、安装、登录动态域名解析服务开始,保证域名解析准确。使用Serv—U来搭建ftp服务,进入SERV-U的本地服务器,点击“新建域”,命名为“MYftp”,然后点击下一步,其他都使用系统默认的设置点下一步直至完成。域已经建立好,这个时候,会提示是否需要给域建立用户,选择“是”,会提示是否需要根据向导来新建用户名。根据提示添加一个用户名为贝锐的账户这时就安装并创建好ftp服务。测试内网是否可以访问ftp站点。在获取本机内网IP后,获取本机内网IP方法如下:通过点击电脑开始——运行——CMD,然后回车,在出现的DOS界面里面输入ipconfig/all,通过查看IP Address获得本机内网IP,打开IE浏览器进行测试,。现在内网已经可以访问了,内网ftp搭建工作完成。
但是在这个过程中,需要注意的是如果有路由器上网,那么需要从外网访问,需要进行端口映射操作。第一种办法是:点击转发规则——虚拟服务器,做好端口映射。另一种方法是:点击转发规则——DMZ主机,DMZ主机的IP地址填写服务器IP地址,勾选启用,点击保存即可。这种方法一般不建议采用,因为采用DMZ主机后,本机的所有端口将完全暴露在广域网,请慎用。
在安装完成花生壳版本的客户端以及注册花生壳账号之后就可以使用花生壳进行穿透了。花生壳因电脑搭建服务器操作简洁,功能齐全,性能稳定,所以花生壳软件不仅个人用户庞大,而且也深受企业用户的欢迎。少花钱多办事,花生壳是网民不错的选择。