您的位置:首页 > 编程语言 > Java开发

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

2017-08-23 14:38 447 查看
问题:

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。不允许任务并发执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: