java多线程读取ftp文件_Java Ftp 连接池(支持多线程)

本文介绍了如何使用SpringMVC、commons-net和commons-pool库配置FTP连接池,支持多线程读取FTP文件。通过配置文件设置FTP服务器参数,并创建FtpClientFactory和FtpClientPool,实现FTPClient的创建、销毁和验证。同时提供了一个FtpClientTemplate工具类用于文件上传和下载,以及测试类进行功能验证。
摘要由CSDN通过智能技术生成

环境及版本:

框架:SpringMVC 5.1.7.RELEASE

commons-net 3.6

commons-pool 2 2.7.0

1. pom.xml中添加依赖

commons-net

commons-net

3.6

org.apache.commons

commons-pool2

2.7.0

2. 配置文件

#ftp服务器配置

ftp.host=192.168.241.128

ftp.port=21

ftp.username=ftp_user

ftp.password=123

#超时时间(0表示一直连接)

ftp.clientTimeout=0

ftp.connectTimeout=0

#编码格式

ftp.encoding=UTF-8

#缓冲器大小

ftp.bufferSize=1024

#每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据

ftp.passiveMode=true

#连接池数量

ftp.defaultpoolsize=10

#FTP连接池配置

#最大数

ftpPool.maxTotal=50

#最小空闲

ftpPool.minIdle=0

#最大空闲

ftpPool.maxIdle=50

#最大等待时间

ftpPool.maxWait=-1

#池对象耗尽之后是否阻塞,maxWait<0时一直等待

ftpPool.blockWhenExhausted=true

#取对象是验证

ftpPool.testOnBorrow=true

#回收验证

ftpPool.testOnReturn=true

#创建时验证

ftpPool.testOnCreate=true

#空闲验证

ftpPool.testWhileIdle=false

#后进先出

ftpPool.lifo=false

3. FtpClient工厂类

package com.longway.busi.component;

import org.apache.commons.net.ftp.FTP;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPReply;

import org.apache.commons.pool2.BasePooledObjectFactory;

import org.apache.commons.pool2.PooledObject;

import org.apache.commons.pool2.impl.DefaultPooledObject;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

import java.io.IOException;

/**

* @description:

* @title: FTP 工厂

* @author: lrxc

* @date: 2019/11/18 19:12

*/

@Component

public class FtpClientFactory extends BasePooledObjectFactory {

@Value("${ftp.host}")

private String host;

@Value("${ftp.port}")

private int port;

@Value("${ftp.username}")

private String username;

@Value("${ftp.password}")

private String password;

@Value("${ftp.clientTimeout}")

private int clientTimeout;

@Value("${ftp.connectTimeout}")

private int connectTimeout;

@Value("${ftp.encoding}")

private String encoding;

@Value("${ftp.bufferSize}")

private int bufferSize;

@Value("${ftp.passiveMode}")

private boolean passiveMode;

private final static Logger log = Logger.getLogger(FtpClientFactory.class.getName());

/**

* 创建FtpClient对象

*/

@Override

public FTPClient create() {

FTPClient ftpClient = new FTPClient();

ftpClient.setConnectTimeout(conn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值