乐趣区

关于java:生产环境ftp问题引发的血案

起因

我负责开发保护的生产零碎,须要通过 ftp 获取银行提供的银行明细入库。最近降级后,频繁曝出 ftp 连贯异样的问题,钻研了 3 天总算搞明确了。

景象


代码介绍

降级前

降级后

修复后

代码开发过程

我接手这个代码后,发现了一点,他仅仅在 finally 外面执行了 disconnect 办法,而没有执行 logout 办法。这样会导致,程序这边是断开了,ftp 上却依然保护着这个连贯。

所以我在降级后,突出一个手贱,给他加上了 logout 办法。后果反而导致了生产环境的 ftp 始终连不上

运行展现

降级前



连贯一个谬误的 ftp,两次都是没连上

降级后



连贯一个谬误的 ftp,第二次连贯竟然返回了一个 true

修复后



连贯一个谬误的 ftp,两次都是没连上

降级后的版本为什么会这么诡异?



因为我引入了 logout 办法,导致 finally 外面,当 clinet 断开时,执行 logout 办法间接异样,反而没有执行 disconnect 办法。

disconnect 办法外面的__initDefaults 办法负责初始化 clinet 的参数。而我又把 client 作为一个全局变量,没有初始化 client 参数,间接导致第二次进入代码

connect 办法,还留有上一次连贯的参数,间接返回了 true,没有进行连贯。所以修复后把 clinet 作为了一个局部变量

退出移动版