spring quartz定时下载ftp文件任务被阻塞

问题:
Spring定时任务有时候运行到 FTPClient.listFiles()或者FTPClient.retrieveFile()方法时,就停止在那里,不再往下执行,重启应用后恢复正常,过一段时间又出现这个问题。起初以为是没有对FTPClient连接设置超时,于是设置了ConnectTimeout,仍然出现这个问题。

原因:
ftp协议不稳定,当连接ftp上传下载数据时有时候会遇到不可知的因素会导致卡死,比如说主动被动切换,服务器连接数满等等

解决:
在调用FTPClient.listFiles()或者FTPClient.retrieveFile()方法之前,调用FTPClient.enterLocalPassiveMode();//ftp连接模式设置为被动模式(ftp server可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。主动模式需要客户端必须开放端口给服务器。被动模式只需要服务器端开放端口给客户端连接就行了)

与ftp无关的原因:
Spring定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行。定时任务每5分钟执行一次,假如每次都执行1小时的话,其他任务就会被阻塞。因为Quartz的线程都被这个定时任务占用了。其他任务只有等待。

解决方案:将JobDetail的concurrent属性配置为false。不允许任务并发执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值