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

FTP下载类:

package com.log.generateXML.util;>

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.LogFactoryImpl;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import com.log.generateXML.dao.LogTableDao;
import com.log.generateXML.dao.impl.LogTableDaoImpl;
import com.novomss.idc.entity.FtpDownloadLog;


/***
 * 功能描述:FTP下载文件类
 * 定时任务配置applicationContext-idc-uploadTimer.xml
 * 
 */
public class DownLoadXML {

	private LogTableDao lts;
	// 日志记录对象
	private final Log log = LogFactoryImpl.getLog(DownLoadXML.class);

	// Xmls下载日志记录
	private FtpDownloadLog ftpdown ;
	// FTP主机
	private String ftpHost = null;
	// FTP连接端口
	private String port = null;
	private int ftpPort ;
	// FTP连接用户
	private String ftpuser = null;
	// FTP用户密码
	private String ftppasswd = null;
	// FTP下载描述
	private String descript ;
	// FTP上传成功与否状态
	private int status;
	
	// 假定错误值
	/***
	 * 1 FTP登陆状态失败
	 * 2 FTP目录设置错误
	 * 3 FTP工作路径切换失败
	 * 4 要下载的文件不存在
	 */
	private int flag;
	
	/****
	 * FTP下载
	 * @param filename
	 * @return
	 * @throws Exception
	 */
	public boolean ftpDownload(String filename) throws Exception {
		
		// 如果参数为空,直接返回提示
		if(filename==null || filename ==""){
			log.info( "filename is null.");
			return false;
		}
		// 保存文件路径
		String downsavefilePath = FtpConfig.getValue("localDir"); // 本地存储目录
		if(downsavefilePath == null || downsavefilePath.length() == 0){
			log.info("本地存储目录属性未设置!");
			return false;
		}
		File downfilePath = new File(downsavefilePath);
		if(!downfilePath.exists()&&!downfilePath.isDirectory()){
			log.info("本地下载文件保存路径不存在!");
			return false;
		}
		
		// 下载文件名
		File file = new File(filename);
		
		// 实例化FTP客户端对象
		FTPClient ftp = new FTPClient();
		// 服务器连接状态
		int reply = 0;
		try {
			
			// 如果FTP未连接则连接服务器
			if (!ftp.isConnected()) {
				// 设置连接属性
				ftpHost = FtpConfig.getValue("ftpHost");	
				port = FtpConfig.getValue("ftpPort");	
				ftpPort = Integer.parseInt(port);
				// 连接服务器
				ftp.connect(ftpHost,ftpPort);
				log.info("连接ftp服务器:" + ftpHost);
				// 连接服务器状态
				reply = ftp.getReplyCode();
				log.info("连接ftp服务器reply:" + reply);
			}
			// 登陆服务器,判断是否登陆成功
			ftpuser = FtpConfig.getValue("userName");
			ftppasswd = FtpConfig.getValue("password");
			boolean isLogin = ftp.login(ftpuser,ftppasswd);	//	登陆FTP用户名、密码
			//log.info("登录ftp服务器isLogin:" + isLogin);
			if(!isLogin){
				log.info("登陆FTP失败");
				flag = 1;
			}else{ log.info("登陆FTP已成功"); }
			
			// 获取FTP工作目录
			String workDir = FtpConfig.getValue("workDir");
			if (workDir == null){
				log.info("workdir is null.");
				flag = 2;
			}
			
			// 上传目录
			String uploadDir = "";
			// 拼接FTP工作路径
			uploadDir += "" + workDir;
			// 切换当前工作路径,更改FTP连接位置
			boolean change = ftp.changeWorkingDirectory(uploadDir);
			if(change == false){
				log.info("changeWorkingDirectory: “"+uploadDir+"” failed.");
				flag=3;
			}
			log.info("切换工作路径状态:"+change);
			
			// 获得下载开始时间
			long starTime = System.currentTimeMillis();
			
			// 初始化文件名,获得当前目录文件
			String savedFileName = "";
			savedFileName = file.getName();
			if(savedFileName==null || savedFileName.length()==0){
				log.info("get file “"+savedFileName+"” failed.");
				flag=4;
			}
			
			/*//验证服务器端文件是否存在
			FileOutputStream fos = new FileOutputStream(savedFileName);
			if(ftp.retrieveFile(filename, fos)){
				log.info("服务器端文件已验证存在:");
			}else {
				flag=4;
				log.info("要下载的文件服务器端不存在:");
			}*/
			
			// 文件流保存路径
			File tempFile = new File(downsavefilePath+"temp_"+savedFileName);
			File destFile = new File(downsavefilePath+savedFileName);
			
			//输出流,输出文件内容到临时文件
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tempFile));
			
			// 设置文件类型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			ftp.setBufferSize(4 * 1048);
			ftp.setControlEncoding("GB2312");
			ftp.enterLocalPassiveMode();
			
			// 下载XML文件,从服务器检索指定文件savedFileName,并写入BufferedOutputStream
			boolean download = ftp.retrieveFile(savedFileName, bos);
			
			// 当前FTP状态
			reply = ftp.getReplyCode();
			bos.close();
			log.info("文件下载:" + download + "时间为:"+ (System.currentTimeMillis() - starTime) + "ms");
			
			//保存文件到指定目标目录
			if(download){
				if(destFile.exists())
					destFile.delete();
				tempFile.renameTo(destFile);
				status = 1;
				descript = "文件下载成功!";
				log.info("文件下载成功!");
			}else {
				tempFile.delete();
				status = 0;
				if(flag==1) descript="FTP登陆状态失败";
				if(flag==2) descript="FTP目录设置错误";
				if(flag==3) descript="FTP工作路径切换失败";
				if(flag==4) descript="要下载的文件不存在";
				log.info( "download: “"+destFile.getPath()+"” faild." );
			}
			
			//写入成功日志并加入告警
			
			lts = new LogTableDaoImpl();
			ftpdown = new FtpDownloadLog();
			
			ftpdown.setFilename(filename);
			ftpdown.setFtphost(ftpHost);
			ftpdown.setFtpport(Long.valueOf(port));
			ftpdown.setFtpuser(ftpuser);
			ftpdown.setFtppasswd(ftppasswd);
			ftpdown.setLocaldir(downsavefilePath);
			ftpdown.setWorkdir(workDir);
			ftpdown.setDescript(descript);
			ftpdown.setStatus(Long.valueOf(status));
			
			boolean flag = lts.saveFtpDownLog(ftpdown);
			if(flag)
				log.info("写入日志成功!");
			
			log.info("接收下载文件的参数:"+ftpdown.getFilename());
			
			//下载失败返回false
			if(status==0)
				return false;
			// 判断FTP连接性
			if (!FTPReply.isPositiveCompletion(reply)) {
				System.err.println("FTP server reply." + reply);
			}
			// 退出登陆
			ftp.logout();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
			ftp.disconnect();	// 释放FTP连接
		}
		return true;
	}
	
	/*public static void main(String[] args) throws Exception{
		
		DownLoadXML dlx = new DownLoadXML();
		String filename =  "20121119999.xml-";
		boolean a = dlx.ftpDownload(filename);
		System.out.println("返回:"+a);
	}*/
	
	public LogTableDao getLts() {
		return lts;
	}
	public void setLts(LogTableDao lts) {
		this.lts = lts;
	}
	
}

定时任务配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<!-- 定时上传-->
	<bean id="uploadTimer" class="com.generatexml.UploadTimer">
		<property name="generator" ref="generator" />
	</bean>
	
	<!-- 定时下载-->
	<bean id="downloadTimer" class="com.log.generateXML.DownloadTimer">
	</bean>

	<!-- 定时处理计费数据业务方法 -->
	<bean id="ccTimer"
		class="com.timer.CalcChargeTimer">
		<!-- 注入方法,引用 -->
	</bean>

	<!-- 定时调度 -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
		<property name="triggers">
		 	<list>
				<ref local="loadTask"/>
				<ref local="loadCc" />
				<ref local="ddownTask"/>
			</list>
		</property>
	</bean>
	
	<bean id="loadTask" class="org.springframework.scheduling.quartz.CronTriggerBean">        
		<property name="jobDetail"><ref bean="jobTask"/></property>        
		<property name="cronExpression">
			<!--<value>0 0/2 * * * ?</value>-->
			 <value>0 10 0 * * ?</value>
		</property>
	</bean>
	
	<bean id="jobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!--具体执行类 -->        
		<property name="targetObject" ref="uploadTimer" />
		<!--执行类的方法名称-->  
		<property name="targetMethod"><value>run</value></property>
	</bean>
	<!-- XML定时 调用文件下载方法 -->
	<bean id="downTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!--具体执行类 -->        
		<property name="targetObject" ref="downloadTimer" />
		<!--执行类的方法名称-->  
		<property name="targetMethod"><value>down</value></property>
	</bean>
	
	<!-- XML定时任务时间配置  秒 分 时 * * ? 每天几点几分执行 -->
	<bean id="ddownTask" class="org.springframework.scheduling.quartz.CronTriggerBean">        
		<property name="jobDetail"><ref bean="downTask"/></property>        
		<property name="cronExpression">
			<!--<value>0 0/2 * * * ?</value>-->
			 <value>0 0 2 * * ?</value>
		</property>
	</bean>
	
	<!-- 任务执行,执行日期   1秒  2分  3时  4日   5月   6星期几 1-7 or SUN  7年份 -->
	<bean id="loadCc" class="org.springframework.scheduling.quartz.CronTriggerBean">        
		<property name="jobDetail"><ref bean="jobCc"/></property>
		<property name="cronExpression">
			 <value>0 0 1 1 * ?</value>
		</property>
	</bean>
	
	<bean id="jobCc" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject"><ref bean="ccTimer"/></property><!--具体执行类 -->
		<property name="targetMethod"><value>operatorData</value></property> <!--执行类的方法名称-->
	</bean>
	
</beans>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值