当前项目技术使用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在处理定时任务方面的特性,这在企业级应用中非常常见,用于执行一些周期性的后台任务,如数据同步、报表生成、清理任务等。 首先,...
在Spring中整合Quartz,我们可以利用Spring的管理能力,如bean的生命周期管理和事务管理,来更方便地创建和管理定时任务。 **Spring+Quartz动态定时任务创建** 将Spring与Quartz结合,我们可以方便地在运行时动态...
在`JobService`类中,我们使用Quartz的API来操作任务,例如`scheduler.scheduleJob()`来安排任务,`scheduler.pauseJob()`和`scheduler.resumeJob()`来暂停或恢复任务,`scheduler.deleteJob()`来删除任务。...
本Demo以"基于SSM+quartz的定时任务管理"为主题,将展示如何在Spring、SpringMVC和MyBatis(SSM)框架基础上,集成Quartz作为调度引擎,实现高效灵活的定时任务管理。 **1. SSM框架简介** SSM是Spring、SpringMVC...
本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务是在指定时间点或按照一定规律自动执行的任务,这在业务系统中非常常见,例如数据清理、报表生成等。Quartz提供...
这篇博客将探讨如何在Spring中集成Quartz来实现定时任务。 首先,我们需要引入Quartz的依赖。在Maven的pom.xml文件中,添加以下依赖: ```xml <groupId>org.quartz-scheduler <artifactId>quartz <version>...
Spring框架提供了多种方式来管理定时任务,包括使用Spring的`@Scheduled`注解和Spring Task模块。然而,当项目对定时任务的需求变得更加复杂时,例如需要更精细的控制、集群环境下的任务调度,Quartz则成为更好的...
SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...
通过整合SpringBoot和Quartz,我们可以利用Spring的自动配置能力,方便地在Spring应用中集成定时任务功能。 二、Quartz动态配置 1. 引入依赖:首先,在`pom.xml`文件中引入SpringBoot的SpringBoot-starter-quartz...
总的来说,Spring集成Quartz提供了灵活的定时任务解决方案,但同时需要注意避免配置错误和并发问题,以防止任务被执行多次。通过理解Quartz的工作原理和Spring的定时任务API,我们可以有效地管理定时任务,确保它们...
Spring与Quartz的集成主要基于Spring的`TaskExecution`和`TaskScheduling`模块,它允许我们以声明式的方式配置定时任务,同时也支持编程式的任务调度。以下将详细介绍如何利用Spring和Quartz实现多任务的定时功能。 ...
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,它们分别用于依赖注入和任务调度。Spring 是一个全方位的 Java 应用开发框架,提供了一系列强大的功能,如 AOP(面向切面编程)、DI(依赖注入)、事务管理等...
首先,Spring集成Quartz主要通过Spring的TaskExecution和TaskScheduling模块,这使得我们可以利用Spring的依赖注入和AOP特性来更好地管理和控制定时任务。在Spring中配置Quartz,我们通常需要以下几个步骤: 1. ...
综上所述,Spring Quartz定时作业项目提供了一个完整的示例,涵盖了Spring集成Quartz的基本操作,帮助开发者快速理解和应用定时任务。通过学习这个项目,你可以深入理解如何在Spring环境中使用Quartz,从而提高应用...
总结来说,通过Spring和Quartz的结合,我们可以构建一个高度可定制、易于管理和扩展的定时任务系统。同时,利用Apache Commons Collections等辅助库,可以提升代码的效率和灵活性。在实际项目中,应根据需求选择合适...
### Spring集成Quartz定时任务框架介绍 #### 一、引言 在现代JavaEE应用程序开发过程中,定时任务是一项常见的需求。这些任务可能包括但不限于:每天固定时间生成报表、定期清理缓存、定时发送邮件提醒等。传统的...
集成Quartz与Spring,可以使我们方便地在Spring管理的bean中调度任务,实现定时任务的灵活配置。 **Quartz核心概念** 1. **Job**: 代表一个可执行的任务,是实际业务逻辑的封装。 2. **Trigger**: 触发器,决定Job...
在SpringBoot中定义定时任务,我们创建一个实现了`org.springframework.scheduling.Trigger`和`org.springframework.scheduling.TaskExecutor`接口的类,或者直接使用Quartz的`CronTrigger`或`SimpleTrigger`。...
Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架集成,实现灵活的定时任务调度。 在 Spring 中集成 Quartz,首先需要创建一个 Java 类作为定时任务的执行体,例如 `MyJob` 类。这个类通常包含一个...
- 了解如何在Web应用(如Spring Boot)中集成Quartz,创建一个启动时自动加载的定时任务。 - 学习如何动态管理任务,如添加、删除、暂停和恢复定时任务。 这个Demo提供了一个很好的起点,帮助开发者快速上手...