`
zhouxingfu520
  • 浏览: 422299 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

定时清理上传的文件 使用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需要包
分享到:
评论

相关推荐

    Spring的定时任务开发及对Quartz和Timer支持

    在【标题】"Spring的定时任务开发及对Quartz和Timer支持"中,涉及到的是Spring在处理定时任务方面的特性,这在企业级应用中非常常见,用于执行一些周期性的后台任务,如数据同步、报表生成、清理任务等。 首先,...

    spring+quartz动态定时任务创建 +mybatis

    在Spring中整合Quartz,我们可以利用Spring的管理能力,如bean的生命周期管理和事务管理,来更方便地创建和管理定时任务。 **Spring+Quartz动态定时任务创建** 将Spring与Quartz结合,我们可以方便地在运行时动态...

    Springboot整合Quartz实现定时任务数据库动态配置

    在`JobService`类中,我们使用Quartz的API来操作任务,例如`scheduler.scheduleJob()`来安排任务,`scheduler.pauseJob()`和`scheduler.resumeJob()`来暂停或恢复任务,`scheduler.deleteJob()`来删除任务。...

    基于SSM+quartz的定时任务管理demo

    本Demo以"基于SSM+quartz的定时任务管理"为主题,将展示如何在Spring、SpringMVC和MyBatis(SSM)框架基础上,集成Quartz作为调度引擎,实现高效灵活的定时任务管理。 **1. SSM框架简介** SSM是Spring、SpringMVC...

    spring3配置quartz定时任务

    本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务是在指定时间点或按照一定规律自动执行的任务,这在业务系统中非常常见,例如数据清理、报表生成等。Quartz提供...

    spring定时任务之Quartz

    这篇博客将探讨如何在Spring中集成Quartz来实现定时任务。 首先,我们需要引入Quartz的依赖。在Maven的pom.xml文件中,添加以下依赖: ```xml &lt;groupId&gt;org.quartz-scheduler &lt;artifactId&gt;quartz &lt;version&gt;...

    定时框架spring+quartz

    Spring框架提供了多种方式来管理定时任务,包括使用Spring的`@Scheduled`注解和Spring Task模块。然而,当项目对定时任务的需求变得更加复杂时,例如需要更精细的控制、集群环境下的任务调度,Quartz则成为更好的...

    SpringQuartz的使用文档

    SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

    springboot+quartz 动态化配置定时任务

    通过整合SpringBoot和Quartz,我们可以利用Spring的自动配置能力,方便地在Spring应用中集成定时任务功能。 二、Quartz动态配置 1. 引入依赖:首先,在`pom.xml`文件中引入SpringBoot的SpringBoot-starter-quartz...

    spring java 定时器 执行两次 quartz

    总的来说,Spring集成Quartz提供了灵活的定时任务解决方案,但同时需要注意避免配置错误和并发问题,以防止任务被执行多次。通过理解Quartz的工作原理和Spring的定时任务API,我们可以有效地管理定时任务,确保它们...

    spring+quartz定时任务

    Spring与Quartz的集成主要基于Spring的`TaskExecution`和`TaskScheduling`模块,它允许我们以声明式的方式配置定时任务,同时也支持编程式的任务调度。以下将详细介绍如何利用Spring和Quartz实现多任务的定时功能。 ...

    spring+quartz定时小例子

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,它们分别用于依赖注入和任务调度。Spring 是一个全方位的 Java 应用开发框架,提供了一系列强大的功能,如 AOP(面向切面编程)、DI(依赖注入)、事务管理等...

    Spring+Quartz定时任务学习文档+实例+jar包

    首先,Spring集成Quartz主要通过Spring的TaskExecution和TaskScheduling模块,这使得我们可以利用Spring的依赖注入和AOP特性来更好地管理和控制定时任务。在Spring中配置Quartz,我们通常需要以下几个步骤: 1. ...

    Spring Quartz定时作业

    综上所述,Spring Quartz定时作业项目提供了一个完整的示例,涵盖了Spring集成Quartz的基本操作,帮助开发者快速理解和应用定时任务。通过学习这个项目,你可以深入理解如何在Spring环境中使用Quartz,从而提高应用...

    spring + Quartz 定时任务

    总结来说,通过Spring和Quartz的结合,我们可以构建一个高度可定制、易于管理和扩展的定时任务系统。同时,利用Apache Commons Collections等辅助库,可以提升代码的效率和灵活性。在实际项目中,应根据需求选择合适...

    Spring集成Quartz定时任务框架介绍.docx

    ### Spring集成Quartz定时任务框架介绍 #### 一、引言 在现代JavaEE应用程序开发过程中,定时任务是一项常见的需求。这些任务可能包括但不限于:每天固定时间生成报表、定期清理缓存、定时发送邮件提醒等。传统的...

    quartz与spring集成

    集成Quartz与Spring,可以使我们方便地在Spring管理的bean中调度任务,实现定时任务的灵活配置。 **Quartz核心概念** 1. **Job**: 代表一个可执行的任务,是实际业务逻辑的封装。 2. **Trigger**: 触发器,决定Job...

    java-springboot-quartz-定时任务.zip

    在SpringBoot中定义定时任务,我们创建一个实现了`org.springframework.scheduling.Trigger`和`org.springframework.scheduling.TaskExecutor`接口的类,或者直接使用Quartz的`CronTrigger`或`SimpleTrigger`。...

    quartz 定时任务调度

    Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架集成,实现灵活的定时任务调度。 在 Spring 中集成 Quartz,首先需要创建一个 Java 类作为定时任务的执行体,例如 `MyJob` 类。这个类通常包含一个...

    quartz定时任务Demo,直接可运行

    - 了解如何在Web应用(如Spring Boot)中集成Quartz,创建一个启动时自动加载的定时任务。 - 学习如何动态管理任务,如添加、删除、暂停和恢复定时任务。 这个Demo提供了一个很好的起点,帮助开发者快速上手...

Global site tag (gtag.js) - Google Analytics