问题描述
各位好,我做了一个apache FTPClient的连接池,目前碰到一个问题:1.从池中取FTPClient对象之前,如何判断该对象是可用的?就好像刚刚new 一个FTPClient对象一样?使用完的FTPClient对象会放到池中,由于JVM的垃圾回收或者FTP服务器的原因,FTPClient对象会失效。我测试了一下,休眠一段时间后从池中取FTPClient对象,isConnected() isAvaliable()两个方法都返回true,但是下载还是失败.对FTP不是很了解,期望给予支持!
解决方案
ftp 链接有超时设置。因此要维持链接的话需要发送nop指令。再开一个线程,定时遍历池中链接,发送nop指令吧。
解决方案二:
几年前使用过这个,是可以做池化处理的,但是需要注意:FTPClient实际上是有状态的,因此在归还的时候需要做相应的处理(比如当前路径清空到根目录等),如果使用完了就直接放到对象池里面,应该会有问题;FTPClient是不能多线程共享的,原因也是因为状态的特性。如果不是因为状态清理的问题,需要具体的错误信息分析才能给出具体的结论。
时间: 2024-10-15 09:49:07