分享

定时任务,定时下载FTP指定文件

 gzdxsbook 2017-04-19

FTP下载类:

  1. package com.log.generateXML.util;>  
  2.   
  3. import java.io.BufferedOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileOutputStream;  
  6.   
  7. import org.apache.commons.logging.Log;  
  8. import org.apache.commons.logging.impl.LogFactoryImpl;  
  9. import org.apache.commons.net.ftp.FTP;  
  10. import org.apache.commons.net.ftp.FTPClient;  
  11. import org.apache.commons.net.ftp.FTPReply;  
  12.   
  13. import com.log.generateXML.dao.LogTableDao;  
  14. import com.log.generateXML.dao.impl.LogTableDaoImpl;  
  15. import com.novomss.idc.entity.FtpDownloadLog;  
  16.   
  17.   
  18. /*** 
  19.  * 功能描述:FTP下载文件类 
  20.  * 定时任务配置applicationContext-idc-uploadTimer.xml 
  21.  *  
  22.  */  
  23. public class DownLoadXML {  
  24.   
  25.     private LogTableDao lts;  
  26.     // 日志记录对象  
  27.     private final Log log = LogFactoryImpl.getLog(DownLoadXML.class);  
  28.   
  29.     // Xmls下载日志记录  
  30.     private FtpDownloadLog ftpdown ;  
  31.     // FTP主机  
  32.     private String ftpHost = null;  
  33.     // FTP连接端口  
  34.     private String port = null;  
  35.     private int ftpPort ;  
  36.     // FTP连接用户  
  37.     private String ftpuser = null;  
  38.     // FTP用户密码  
  39.     private String ftppasswd = null;  
  40.     // FTP下载描述  
  41.     private String descript ;  
  42.     // FTP上传成功与否状态  
  43.     private int status;  
  44.       
  45.     // 假定错误值  
  46.     /*** 
  47.      * 1 FTP登陆状态失败 
  48.      * 2 FTP目录设置错误 
  49.      * 3 FTP工作路径切换失败 
  50.      * 4 要下载的文件不存在 
  51.      */  
  52.     private int flag;  
  53.       
  54.     /**** 
  55.      * FTP下载 
  56.      * @param filename 
  57.      * @return 
  58.      * @throws Exception 
  59.      */  
  60.     public boolean ftpDownload(String filename) throws Exception {  
  61.           
  62.         // 如果参数为空,直接返回提示  
  63.         if(filename==null || filename ==""){  
  64.             log.info( "filename is null.");  
  65.             return false;  
  66.         }  
  67.         // 保存文件路径  
  68.         String downsavefilePath = FtpConfig.getValue("localDir"); // 本地存储目录  
  69.         if(downsavefilePath == null || downsavefilePath.length() == 0){  
  70.             log.info("本地存储目录属性未设置!");  
  71.             return false;  
  72.         }  
  73.         File downfilePath = new File(downsavefilePath);  
  74.         if(!downfilePath.exists()&&!downfilePath.isDirectory()){  
  75.             log.info("本地下载文件保存路径不存在!");  
  76.             return false;  
  77.         }  
  78.           
  79.         // 下载文件名  
  80.         File file = new File(filename);  
  81.           
  82.         // 实例化FTP客户端对象  
  83.         FTPClient ftp = new FTPClient();  
  84.         // 服务器连接状态  
  85.         int reply = 0;  
  86.         try {  
  87.               
  88.             // 如果FTP未连接则连接服务器  
  89.             if (!ftp.isConnected()) {  
  90.                 // 设置连接属性  
  91.                 ftpHost = FtpConfig.getValue("ftpHost");      
  92.                 port = FtpConfig.getValue("ftpPort");     
  93.                 ftpPort = Integer.parseInt(port);  
  94.                 // 连接服务器  
  95.                 ftp.connect(ftpHost,ftpPort);  
  96.                 log.info("连接ftp服务器:" + ftpHost);  
  97.                 // 连接服务器状态  
  98.                 reply = ftp.getReplyCode();  
  99.                 log.info("连接ftp服务器reply:" + reply);  
  100.             }  
  101.             // 登陆服务器,判断是否登陆成功  
  102.             ftpuser = FtpConfig.getValue("userName");  
  103.             ftppasswd = FtpConfig.getValue("password");  
  104.             boolean isLogin = ftp.login(ftpuser,ftppasswd); //  登陆FTP用户名、密码  
  105.             //log.info("登录ftp服务器isLogin:" + isLogin);  
  106.             if(!isLogin){  
  107.                 log.info("登陆FTP失败");  
  108.                 flag = 1;  
  109.             }else{ log.info("登陆FTP已成功"); }  
  110.               
  111.             // 获取FTP工作目录  
  112.             String workDir = FtpConfig.getValue("workDir");  
  113.             if (workDir == null){  
  114.                 log.info("workdir is null.");  
  115.                 flag = 2;  
  116.             }  
  117.               
  118.             // 上传目录  
  119.             String uploadDir = "";  
  120.             // 拼接FTP工作路径  
  121.             uploadDir += "" + workDir;  
  122.             // 切换当前工作路径,更改FTP连接位置  
  123.             boolean change = ftp.changeWorkingDirectory(uploadDir);  
  124.             if(change == false){  
  125.                 log.info("changeWorkingDirectory: “"+uploadDir+"” failed.");  
  126.                 flag=3;  
  127.             }  
  128.             log.info("切换工作路径状态:"+change);  
  129.               
  130.             // 获得下载开始时间  
  131.             long starTime = System.currentTimeMillis();  
  132.               
  133.             // 初始化文件名,获得当前目录文件  
  134.             String savedFileName = "";  
  135.             savedFileName = file.getName();  
  136.             if(savedFileName==null || savedFileName.length()==0){  
  137.                 log.info("get file “"+savedFileName+"” failed.");  
  138.                 flag=4;  
  139.             }  
  140.               
  141.             /*//验证服务器端文件是否存在 
  142.             FileOutputStream fos = new FileOutputStream(savedFileName); 
  143.             if(ftp.retrieveFile(filename, fos)){ 
  144.                 log.info("服务器端文件已验证存在:"); 
  145.             }else { 
  146.                 flag=4; 
  147.                 log.info("要下载的文件服务器端不存在:"); 
  148.             }*/  
  149.               
  150.             // 文件流保存路径  
  151.             File tempFile = new File(downsavefilePath+"temp_"+savedFileName);  
  152.             File destFile = new File(downsavefilePath+savedFileName);  
  153.               
  154.             //输出流,输出文件内容到临时文件  
  155.             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tempFile));  
  156.               
  157.             // 设置文件类型  
  158.             ftp.setFileType(FTP.BINARY_FILE_TYPE);  
  159.             ftp.setBufferSize(4 * 1048);  
  160.             ftp.setControlEncoding("GB2312");  
  161.             ftp.enterLocalPassiveMode();  
  162.               
  163.             // 下载XML文件,从服务器检索指定文件savedFileName,并写入BufferedOutputStream  
  164.             boolean download = ftp.retrieveFile(savedFileName, bos);  
  165.               
  166.             // 当前FTP状态  
  167.             reply = ftp.getReplyCode();  
  168.             bos.close();  
  169.             log.info("文件下载:" + download + "时间为:"+ (System.currentTimeMillis() - starTime) + "ms");  
  170.               
  171.             //保存文件到指定目标目录  
  172.             if(download){  
  173.                 if(destFile.exists())  
  174.                     destFile.delete();  
  175.                 tempFile.renameTo(destFile);  
  176.                 status = 1;  
  177.                 descript = "文件下载成功!";  
  178.                 log.info("文件下载成功!");  
  179.             }else {  
  180.                 tempFile.delete();  
  181.                 status = 0;  
  182.                 if(flag==1) descript="FTP登陆状态失败";  
  183.                 if(flag==2) descript="FTP目录设置错误";  
  184.                 if(flag==3) descript="FTP工作路径切换失败";  
  185.                 if(flag==4) descript="要下载的文件不存在";  
  186.                 log.info( "download: “"+destFile.getPath()+"” faild." );  
  187.             }  
  188.               
  189.             //写入成功日志并加入告警  
  190.               
  191.             lts = new LogTableDaoImpl();  
  192.             ftpdown = new FtpDownloadLog();  
  193.               
  194.             ftpdown.setFilename(filename);  
  195.             ftpdown.setFtphost(ftpHost);  
  196.             ftpdown.setFtpport(Long.valueOf(port));  
  197.             ftpdown.setFtpuser(ftpuser);  
  198.             ftpdown.setFtppasswd(ftppasswd);  
  199.             ftpdown.setLocaldir(downsavefilePath);  
  200.             ftpdown.setWorkdir(workDir);  
  201.             ftpdown.setDescript(descript);  
  202.             ftpdown.setStatus(Long.valueOf(status));  
  203.               
  204.             boolean flag = lts.saveFtpDownLog(ftpdown);  
  205.             if(flag)  
  206.                 log.info("写入日志成功!");  
  207.               
  208.             log.info("接收下载文件的参数:"+ftpdown.getFilename());  
  209.               
  210.             //下载失败返回false  
  211.             if(status==0)  
  212.                 return false;  
  213.             // 判断FTP连接性  
  214.             if (!FTPReply.isPositiveCompletion(reply)) {  
  215.                 System.err.println("FTP server reply." + reply);  
  216.             }  
  217.             // 退出登陆  
  218.             ftp.logout();  
  219.         } catch (Exception e) {  
  220.             e.printStackTrace();  
  221.             throw new RuntimeException(e.getMessage());  
  222.         } finally {  
  223.             ftp.disconnect();   // 释放FTP连接  
  224.         }  
  225.         return true;  
  226.     }  
  227.       
  228.     /*public static void main(String[] args) throws Exception{ 
  229.          
  230.         DownLoadXML dlx = new DownLoadXML(); 
  231.         String filename =  "20121119999.xml-"; 
  232.         boolean a = dlx.ftpDownload(filename); 
  233.         System.out.println("返回:"+a); 
  234.     }*/  
  235.       
  236.     public LogTableDao getLts() {  
  237.         return lts;  
  238.     }  
  239.     public void setLts(LogTableDao lts) {  
  240.         this.lts = lts;  
  241.     }  
  242.       
  243. }  

定时任务配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd">  
  3.   
  4. <beans>  
  5.     <!-- 定时上传-->  
  6.     <bean id="uploadTimer" class="com.generatexml.UploadTimer">  
  7.         <property name="generator" ref="generator" />  
  8.     </bean>  
  9.       
  10.     <!-- 定时下载-->  
  11.     <bean id="downloadTimer" class="com.log.generateXML.DownloadTimer">  
  12.     </bean>  
  13.   
  14.     <!-- 定时处理计费数据业务方法 -->  
  15.     <bean id="ccTimer"  
  16.         class="com.timer.CalcChargeTimer">  
  17.         <!-- 注入方法,引用 -->  
  18.     </bean>  
  19.   
  20.     <!-- 定时调度 -->  
  21.     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">   
  22.         <property name="triggers">  
  23.             <list>  
  24.                 <ref local="loadTask"/>  
  25.                 <ref local="loadCc" />  
  26.                 <ref local="ddownTask"/>  
  27.             </list>  
  28.         </property>  
  29.     </bean>  
  30.       
  31.     <bean id="loadTask" class="org.springframework.scheduling.quartz.CronTriggerBean">          
  32.         <property name="jobDetail"><ref bean="jobTask"/></property>          
  33.         <property name="cronExpression">  
  34.             <!--<value>0 0/2 * * * ?</value>-->  
  35.              <value>0 10 0 * * ?</value>  
  36.         </property>  
  37.     </bean>  
  38.       
  39.     <bean id="jobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  40.         <!--具体执行类 -->          
  41.         <property name="targetObject" ref="uploadTimer" />  
  42.         <!--执行类的方法名称-->    
  43.         <property name="targetMethod"><value>run</value></property>  
  44.     </bean>  
  45.     <!-- XML定时 调用文件下载方法 -->  
  46.     <bean id="downTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  47.         <!--具体执行类 -->          
  48.         <property name="targetObject" ref="downloadTimer" />  
  49.         <!--执行类的方法名称-->    
  50.         <property name="targetMethod"><value>down</value></property>  
  51.     </bean>  
  52.       
  53.     <!-- XML定时任务时间配置  秒 分 时 * * ? 每天几点几分执行 -->  
  54.     <bean id="ddownTask" class="org.springframework.scheduling.quartz.CronTriggerBean">          
  55.         <property name="jobDetail"><ref bean="downTask"/></property>          
  56.         <property name="cronExpression">  
  57.             <!--<value>0 0/2 * * * ?</value>-->  
  58.              <value>0 0 2 * * ?</value>  
  59.         </property>  
  60.     </bean>  
  61.       
  62.     <!-- 任务执行,执行日期   1秒  2分  3时  4日   5月   6星期几 1-7 or SUN  7年份 -->  
  63.     <bean id="loadCc" class="org.springframework.scheduling.quartz.CronTriggerBean">          
  64.         <property name="jobDetail"><ref bean="jobCc"/></property>  
  65.         <property name="cronExpression">  
  66.              <value>0 0 1 1 * ?</value>  
  67.         </property>  
  68.     </bean>  
  69.       
  70.     <bean id="jobCc" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  71.         <property name="targetObject"><ref bean="ccTimer"/></property><!--具体执行类 -->  
  72.         <property name="targetMethod"><value>operatorData</value></property> <!--执行类的方法名称-->  
  73.     </bean>  
  74.       
  75. </beans>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约