最近在项目中,要用到定时器,需要每个月清理一次服务器端的某个临时文件夹。自然而然就想到了quartz,但是以前只是挺同事说起过,自己还没真正的用过,现在就自己动手来做一个吧,先从google开始,呵呵。
参看了google的一些资料以后,大致了解了一下。先给出官方的api地址吧:
http://opensymphony.com/quartz/api/。先去下载quartz的jar包吧。我用的是quartz-1.5.2.jar。使用quartz,首先你需要创建一个job类,这个类要实现org.quartz.Job接口,然后实现它的execute方法,这个execute方法里面执行的操作,就是最终你的定时器要完成的业务了。
先给出我的一段代码吧:
public class DeleteReportTempJob implements Job {
@SuppressWarnings("unchecked")
public void execute(JobExecutionContext context) throws JobExecutionException
{
// 获得jobDetail传过来的参数
Map<String,Object> map = context.getJobDetail().getJobDataMap();
ServletContext servletContext = (ServletContext)map.get("servletContext");
String reportTemplatePath = servletContext.getRealPath("/WEB-INF") + System.getProperty("file.separator");
reportTemplatePath = reportTemplatePath.replace('\\', '/');
// 获得临时文件夹的路径
String dir = reportTemplatePath.substring(0, reportTemplatePath.indexOf("/WEB-INF")) + "/reportTemp/";
File file = new File(dir);
try
{
if(file.exists() && file.isDirectory())
{
// Cleans a directory without deleting it.
FileUtils.cleanDirectory(file);
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
然后就是新建一个servlet继承org.quartz.ee.servlet.QuartzInitializerServlet可以去看看这个类的api,里面写的非常详细。
代码如下:
/**
* 初始化
* @param ServletConfig cfg
* @return
*/
public void init(ServletConfig cfg) throws javax.servlet.ServletException
{
super.init(cfg);
run(cfg);
}
/**
* 创建一个调度器<code>Scheduler<code>的实例。
* 实例化一个监控定制报表表的线程,并启动该线程。
* @param ServletConfig cfg
* @return
*/
public void run(ServletConfig cfg)
{
ServletContext servletContext = cfg.getServletContext();
SchedulerFactory factory = (SchedulerFactory)cfg.getServletContext().getAttribute(QUARTZ_FACTORY_KEY);
Scheduler sched;
try
{
sched = factory.getScheduler();
sched.start();
JobDetail jobDetail = new JobDetail(jobName, Scheduler.DEFAULT_GROUP,
DeleteReportTempJob.class);
// 将ServletContext对象放到map中,然后从job中取出来,从而取得路径
Map<String,Object> map = new HashMap<String,Object>();
map.put("servletContext", servletContext);
JobDataMap dateMap = new JobDataMap(map);
jobDetail.setJobDataMap(dateMap);
// fire at the first day 00:00 in every month, start right now
Trigger trigger = TriggerUtils.makeMonthlyTrigger(triggerName, 1, 0, 0);
// test code
// SimpleTrigger trigger = new SimpleTrigger("testTrigger"+triggerName, Scheduler.DEFAULT_GROUP,0,90000);
// start on the next hour
// trigger.setStartTime(TriggerUtils.getEvenHourDate(new Date()));
// start on the next minute
// trigger.setStartTime(TriggerUtils.getEvenMinuteDate(new Date()));
sched.scheduleJob(jobDetail, trigger);
}
catch (SchedulerException e)
{
e.printStackTrace();
}
}
如果是比较简单的定时器,可以直接通过TriggerUtils类来获得Trigger,他里面有每天触发,每个星期触发,每个月触发等等函数。如果是比较复杂的话,可以创建Trigger的两个子类来实现,详见api。通过TriggerUtils类来创建的Trigger,默认的开始时间都是‘now’,也就是web应用启动的时候。当然你也可以自己设置。
最后在web.xml里面配置一下上面的servlet就行了。<load-on-startup>1</load-on-startup>,随web应用而装载。
分享到:
相关推荐
Quartz是一款功能强大的开源Java定时框架,用于在Java应用程序中创建和管理计划任务。它允许开发者精确地安排作业,从简单的一次性任务到复杂的调度模式。Quartz 1.5.2是该项目的一个较旧版本,但它仍然包含了实现...
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建...Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0。
Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...
Java定时器框架Quartz是Java开发中用于任务调度的一个强大工具,它允许开发者精确地控制任务的执行时间,包括一次性任务和周期性任务。Quartz以其灵活性和稳定性,在企业级应用中广泛使用,尤其在需要定期执行后台...
Quartz是一款功能强大的Java开源定时任务框架,它允许开发者创建、调度和执行各种类型的任务,以实现应用程序的自动化和批处理。Quartz以其灵活的API、丰富的特性以及稳定性,成为了许多企业级应用首选的定时解决...
SSM定时器Quartz是一个广泛使用的Java定时任务框架,它允许开发者在应用程序中安排复杂的作业执行计划。在Java世界里,Quartz是一个强大的工具,它能够处理大量的并发任务,并提供了丰富的API来创建、调度和管理任务...
Quartz是一款强大的开源任务调度库,它能够与Java应用程序无缝集成,实现复杂的时间触发任务。当我们遇到Spring定时器执行两次或者更多次的问题时,这通常是由于配置不当或者多线程并发导致的。下面将详细介绍如何...
JAVA定时器是一种基于Quartz框架的任务调度器,用于在指定的时间执行特定的任务。在 Spring 框架中,JAVA定时器可以与Quartz框架集成,实现自动执行任务的功能。 1. JAVA定时器的基本概念 JAVA定时器是基于Quartz...
Spring定时器Quartz是Java应用中广泛使用的任务调度框架,它允许开发者定义并执行复杂的定时任务。这篇博客可能探讨了如何在Spring框架中集成Quartz,以实现灵活、可扩展的任务调度。 Quartz是一个开源的作业调度...
在实际开发中,Java定时器常与其他框架结合使用,如Spring的`@Scheduled`注解或Quartz等高级定时任务库,以实现更复杂的定时任务需求。 通过以上的讲解,你应该对Java定时器的使用有了深入的理解。在实际项目中,...
本教程将详细讲解如何使用Quartz实现一个简单的定时器功能。 首先,我们需要引入Quartz的依赖库到项目中。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.quartz-scheduler ...
Quartz是Java平台上的一款强大的任务调度框架,它允许开发者创建、调度和管理作业与触发器。这个API文档详细地介绍了如何使用Quartz进行任务的定时执行。Quartz的核心概念包括Job(作业)、Trigger(触发器)和...
在Java开发中,定时任务的实现有多种方式,其中Java Quartz和Spring Task是常用的两种解决方案。本文将详细介绍这两种定时任务的实现方法,并对比它们的特点。 首先,我们来看Java自带的`java.util.Timer`类。虽然...
在Java编程中,定时任务是不可或缺的一部分,它们用于执行周期性操作,如数据备份、监控、清理等。本文将深入探讨如何在Java中设置和停止定时任务,主要关注`java.util.Timer`和`java.util.TimerTask`,以及更现代的...
`Spring`框架是Java开发中的一个核心组件,它提供了诸如依赖注入、AOP(面向切面编程)以及事务管理等功能。`Quartz`是一个开源的工作调度器,可以用来执行定时任务。这里我们讨论的是如何在`IDEA`中结合`Spring`和`...
【标题】:“定时器Quartz” Quartz是一个开源的工作调度框架,它允许程序在特定时间执行任务,类似于Java中的ScheduledExecutorService,但提供了更高级别的功能。Quartz主要用于企业级应用,可以创建、调度和执行...
这个压缩包“quartz_maven”很可能是包含了一个使用Quartz和Maven构建的Java定时器示例项目。 在这个项目中,开发者可能已经配置好了一切必要的设置,包括Maven的pom.xml文件,用于声明项目依赖,特别是对Quartz库...
总的来说,“定时器Quartz的应用”这篇博客文章可能详细介绍了Quartz在Java开发中的使用,涵盖了从基本概念到高级特性的各个方面,对于想要学习和掌握任务调度的开发者来说是一份宝贵的学习资料。通过理解Quartz的...
本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...
标题 "定时器 quartz 和 spring" 涉及到的是两个在Java开发中非常重要的框架——Quartz和Spring。Quartz是一个开源的工作调度框架,它允许开发者创建、调度和执行任务,而Spring则是一个功能丰富的应用程序框架,...