配置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需要包