明天在公司排查通过Ftp上传数据文件、从Ftp下载pdf文件并上传至公司的云盘服务器,碰到一个问题,现将此问题记录如下:
一、程序逻辑
程序从数据库中读取一批数据,将这一批数据分组,每组的数据依照以下逻辑:
1、生成xml上传至FTP服务器
2、该FTP服务器下载指定名称的pdf文件
3、将下载回来的pdf文件上传至公司的云盘服务器
二、问题景象
程序第一组数据处理胜利,第二组数据处理失败,解决失败后,可从日志下面看到如下谬误提醒:
java.net.ConnectException: Connection refused (Connection refused)

at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:920) at org.apache.commons.net.ftp.FTPClient._retrieveFileStream(FTPClient.java:1980) at org.apache.commons.net.ftp.FTPClient.retrieveFileStream(FTPClient.java:1967) 

发现问题报错点是在以上“2、该FTP服务器下载指定名称的pdf文件”步骤之后,后续发动的针对FTP的所有操作均会报错。
三、问题代码(请疏忽编码标准,这个是他人写的代码,我帮忙排查,的确是重大不符合规范^.^)
1、连贯FTP及上传(一次连贯后,在循环外面上传和下载)

2、下载

3、上传云盘

4、敞开FTP连贯

四、排查后果
1、通过排查日志发现,问题报错点是在以上“2、该FTP服务器下载指定名称的pdf文件”步骤之后,代码在ftpClient.retrieveFileStream之后,FTP文件服务器连贯就被敞开
2、排查官网资料,发现在读取ftp的流操作后,在敞开InputStream流之后,须要应用ftpClient.completePendingCommand()将pending的command完结掉才容许发动下一次操作。最终代码批改如下:

3、附起因截图