定时清理上传的文件 使用quartz来和spring集成定时任务

当前项目技术使用struts2+spring2+hibernate3 现在需要开发一个新功能,需要系统来定时来执行一段代码,比如每天大半夜定时进行删除上传的文件。可以使用著名的 quartz来和spring做这件事。

配置quartz的文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<!--定义定时任务类-->
<bean id="someData" class="com.init.JobData" />

<bean id="someJob" class="com.init.DemoJob">
<property name="jobData">
<ref bean="someData" />
</property>
</bean>


<bean id="jobDetailBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="someJob" />
</property>
<property name="targetMethod">
<value>execute</value>
</property>
</bean>



<bean id="cronTriggerBean"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<!--这里定义定时任务的对象的位置-->
<property name="jobDetail">
<ref bean="jobDetailBean" />
</property>
<!--这里定义每月15日上午凌晨3:15触发-->
<property name="cronExpression">
<value>0 15 3 15 * ?</value>
</property>
</bean>
<!--
1.秒(0–59)

2.分钟(0–59)

3.小时(0–23)

4.月份中的日期(1–31)

5.月份(1–12或JAN–DEC)

6.星期中的日期(1–7或SUN–SAT)

7.年份(1970–2099)
十秒触发
0/10 * * * * ?

0 0 10,14,16 * * ?
每天上午10点,下午2点和下午4点
0 0,15,30,45 * 1-10 * ?
每月前10天每隔15分钟
30 0 0 1 1 ? 2012
在2012年1月1日午夜过30秒时
0 0 8-5 ? * MON-FRI
每个工作日的工作时间
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15
-->
<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerBean" />
</list>
</property>
</bean>

</beans>




import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.apache.bcel.classfile.Constant;
import util.file.FileTools;

public class JobData {
private static Log log = LogFactory.getLog(JobData.class);
int datenumbet=15; //以前
SimpleDateFormat ddd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
public String delUploadData() {
log.info("时隔"+datenumbet+"天 删除导出的excel文件开始 执行时间: "+ddd.format(new Date()));
String path = Constant.class.getResource("/").getPath(); // 獲取classpath路徑
path = path.substring(0, path.lastIndexOf("WEB-INF")) + "upload/"; // WEB-INF上一級就是項目的根目錄
try {
FileTools.getInstance().deleteFile(path, datenumbet,"*");
} catch (Exception e) {
log.info("\r删除失败: "+e.getMessage());
}
log.info("\r执行结束: "+ddd.format(new Date()));
return "执行时间: " + ddd.format(new Date())+ "\r"+path;


}


public String delOracleData() {
log.info("时隔"+datenumbet+"天 删除备份的oracle文件开始 执行时间: "+ddd.format(new Date()));
try {
FileTools.getInstance().deleteFile("E:\\back", datenumbet,"dmp");
} catch (Exception e) {
log.info("\r删除失败: "+e.getMessage());
}
log.info("\r执行结束: "+ddd.format(new Date()));
return "执行时间: " + ddd.format(new Date())+ "\r"+"E:\\back";


}
}




public class DemoJob {
//extends QuartzJobBean
private JobData jobData;

public JobData getJobData() {
return jobData;
}

public void setJobData(JobData jobData) {
this.jobData = jobData;
}

// public void executeInternal(JobExecutionContext context) {
// System.out.println(jobData.getData() + " is executed.\r");
// String temp = Constant.class.getResource("/").getPath(); // 獲取classpath路徑
// temp = temp.substring(0, temp.lastIndexOf("WEB-INF")) + "upload/"; // WEB-INF上一級就是項目的根目錄
// System.out.print(temp + "\r");
// }

public void execute() {
System.out.print(jobData.delUploadData());
System.out.print(jobData.delOracleData());
}
}


FileTools 类删除文件的方法



import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;

import util.other.DateUtils;

@SuppressWarnings( { "serial", "unchecked", "static-access", "unused" })
public class FileTools {

private static final FileTools ft = new FileTools();

public static FileTools getInstance() {
return FileTools.ft;
}

private FileTools() {
}




public void deleteFile(String path, int datatime, String pttrn)
throws Exception {
if (StringUtils.isNotBlank(pttrn)) {
File file = new File(path);
File[] array = file.listFiles();
for (int i = 0; i < array.length; i++) {
File filepro = array[i];
if (filepro.exists() && filepro.isFile()) {
if(!filepro.getName().equals("ajbftemp.xls")){
SimpleDateFormat ft = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
if (DateUtils.getDayCompare(ft.parse(ft.format(filepro
.lastModified()))) >= datatime) {
if (pttrn.equals("*")) {
filepro.delete();
} else {
String uuid = StringUtils.substringAfterLast(
filepro.getName(), ".");
if (uuid.trim().toUpperCase().equals(pttrn.trim().toUpperCase())) {
filepro.delete();
}
}
}
}
}
}
}
}







}



DateUtils.getDayCompare相隔天数比较的方法

/**
* 日期比较函数
*
* @param second
* Date 比较日期
* @return 返回当前日期与比较日期相差天数
* @throws ParseException
*/
public static long getDayCompare(Date second) throws ParseException {
Date dt = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd");
dt = ft.parse(ft.format(dt));
second = ft.parse(ft.format(second));
return dt.getTime() / 1000 / 60 / 60 / 24 - second.getTime() / 1000
/ 60 / 60 / 24;
}


quartz需要包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值