【com.jcraft.jsch】SFtpUtils使用com.jcraft.jsch.ChannelSftp.stat()报错:2或者4(failure/IndexOutOfBounds)

先出结论:如果你的ChannelSftp抛了异常,但又没有明确的报错(例如:no such file等),那么很可能就是因为你的SFtpUtils非线程安全导致的。

如题,这两天生产环境中持续出现了SFtpUtils调用判断文件是否存在的方法(ChannelSftp.stat())出现异常的情况。如下:

 

 找了一天国内外各大网站,都没有对这个报错很好的解答。

其实这两个问题都是因为ChannelSftp以及Channel并非线程安全导致的,复现demo如下:

 

 

 使用多线程去调用SFtpUtils会随机报错,2,4等等。

提供两种解决思路:一是把ChannelSftp和Channel放到ThreadLocal中,每个线程要使用时,先初始化ThreadLocal中的ChannelSftp及Channel,再进行具体的方法调用。二是把调用的方法加上锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值