`
JackyCheng2007
  • 浏览: 253924 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用Quartz实现定时任务

阅读更多
        你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果 发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用java编程吗?如果这些问题中任何一个你回答是,那么你应该使用 Quartz调度器。

旁注:Matrix目前就大量使用到了Quartz。比如,排名统计功能的实现,在Jmatrix里通过Quartz定义了一个定时调度作业,在每天凌晨一点,作业开始工作,重新统计大家的Karma和排名等。

还有,RSS文件的生成,也是通过Quartz定义作业,每隔半个小时生成一次RSS XML文件。

       Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个, 甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
       http://www.opensymphony.com/quartz/

从下载连接取得Quartz的发布版本,并且解压到到本地 目录。这个下载文件包含了一个预先构建好的Quartz二进制文件(quartz.jar),你可以将它放进自己的应用中。Quartz框架只需要少数的 第三方库,并且这些三方库是必需的,你很可能已经在使用这些库了。

你要把Quartz的安装目录的

quartz.properties文件

Quartz有一个叫做 quartz.properties的配置文件,它允许你修改框架运行时环境。缺省是使用Quartz.jar里面的quartz.properties 文件。当然,你应该创建一个quartz.properties文件的副本并且把它放入你工程的classes目录中以便类装载器找到它。 quartz.properties样本文件如例1所示。

例1.quartz.properties文件允许修改Quartz运行环境:

一旦将Quartz.jar文件和第三方库加到自己的工程里面并且quartz.properties文件在工程的classes目录中,就可以创建作业了。


1. 在web.xml里面加上

<listener>
            <listener-class>package.ContextListener</listener-class>
        </listener>

这样就可以在部署的时候启动定时器。

package.ContextListener.java

package package;


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.quartz.SchedulerException;

public class ContextListener implements ServletContextListener {
     

Runner qRunner = null;

 
    public void contextInitialized(ServletContextEvent arg0) {

        // init job

        // start schedule task
        try {
            qRunner = new Runner();
            qRunner.task();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public void contextDestroyed(ServletContextEvent arg0) {
        try {
           // stop task
            qRunner.stop();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

}

Runner.java


import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

/**
 */
public class Runner {

    static Scheduler scheduler = null;

    public void task() throws SchedulerException {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        scheduler = schedulerFactory.getScheduler();

        // current time
        long ctime = System.currentTimeMillis();

        // Initiate JobDetail with job name, job group, and executable job class
        JobDetail jobDetail = new JobDetail("jobDetail1", "jobDetailGroup1",
                YourScheduleJob.class);
        // Initiate CronTrigger with its name and group name
        CronTrigger cronTrigger = new CronTrigger("cronTrigger",
                "triggerGroup1");
        try {
            // setup CronExpression
            CronExpression cexp = new CronExpression("0/180 * * * * ?");
            // Assign the CronExpression to CronTrigger
            cronTrigger.setCronExpression(cexp);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // schedule a job with JobDetail and Trigger
        scheduler.scheduleJob(jobDetail, cronTrigger);

        // start the scheduler
        scheduler.start();
    }

    public void stop() throws SchedulerException {
        scheduler.shutdown();
    }
public static void main(String args[]) {
        try {
            Runner qRunner = new Runner();
            qRunner.task();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}


YourScheduleJob.java


import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class YourScheduleJob implements Job {
    
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("In SimpleQuartzJob - executing its JOB at "
                + new Date() + " by " + context.getTrigger().getName());
       
        // your job here
       
    }

}




分享到:
评论

相关推荐

    定时任务quartz实现分组串行并行动态配置

    本篇文章将深入探讨如何利用Quartz实现定时任务的分组、串行和并行动态配置。 首先,理解Quartz的核心概念是必要的。`Job`是执行任务的基本单元,`Trigger`则决定了何时触发Job。Quartz提供了`Scheduler`来管理和...

    使用Quartz实现定时功能

    以下是一个简单的Quartz定时任务示例: ```java public class QuartzTest { public static void main(String[] args) { try { new QuartzTest().startSchedule(); } catch (Exception e) { e.printStackTrace...

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

    为了方便管理和监控定时任务,可以开发一个Web界面,利用Quartz提供的API查询Job和Trigger信息,支持新增、修改、删除等操作。此外,还可以查看任务执行日志,以便于排查问题。 总结,本Demo旨在通过SSM+Quartz的...

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

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+mybatis+quartz动态定时任务创建"就是一个常见的技术栈,用于实现这样的目标。这个组合充分利用了各组件的优势,提供了强大的后端服务支持...

    SpringBoot 整合Quartz(集群)实现定时任务调度

    SpringBoot整合Quartz实现定时任务调度是企业级应用中常见的需求,主要用于自动化执行某些周期性的任务,例如数据备份、报表生成、系统维护等。Quartz是一个功能强大的开源作业调度框架,能够灵活地定义任务和调度...

    ssm集成quartz完成定时任务

    SSM(Spring、SpringMVC、MyBatis)框架与Quartz的集成是Java开发中常见的一种实现定时任务的方法。Quartz是一个强大的开源作业调度框架,可以用来执行定时任务,而SSM作为主流的Java Web开发框架,为业务逻辑处理...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    在多应用服务器负载均衡环境下,Spring Quartz定时任务的重复执行问题是一个常见的挑战。Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,...

    java quartz 定时任务

    本项目利用Quartz 实现了基于Cron表达式的定时任务,让我们深入探讨一下相关的知识点。 1. **Quartz介绍**: - Quartz 是一个完全由Java编写的开源作业调度框架,它可以在Java应用中用于执行定时任务。Quartz 支持...

    【SpringBoot】廿五、SpringBoot中使用Quartz管理定时任务.docx

    在本篇文章中,我们将探讨如何在SpringBoot中利用Quartz实现定时任务的管理。 Quartz是一个开源的作业调度框架,完全用Java编写,适用于J2SE和J2EE环境。Quartz具有高度的灵活性和易用性,可以创建简单的或复杂的...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    本项目旨在演示如何利用Spring和Quartz从数据库中动态加载定时任务,并实现对它们的增删改查功能。以下是关于这个主题的详细知识讲解。 首先,Quartz是一个开源的作业调度框架,它允许开发者创建、安排和执行定时...

    Springboot2-Quartz 后台可动态配置的定时任务

    此外,还可以自定义监控界面,利用Quartz的MBean特性,展示更丰富的任务信息。 8. 使用Admin UI:标签中的"admin"可能指的是SpringBoot Admin,这是一个用于监控SpringBoot应用的工具。它可以与Quartz整合,展示...

    Quartz定时任务框架

    总之,Quartz定时任务框架为Java开发者提供了一套灵活且功能强大的任务调度解决方案。通过理解其核心组件和API,我们可以方便地创建和管理各种定时任务,以满足各种业务需求。在这个简单的示例中,我们看到了如何每...

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

    当结合Quartz,一个强大的任务调度库,我们可以实现动态的定时任务创建,这在业务逻辑中有着广泛的应用,如数据同步、定时报表生成等。 **Spring框架** Spring框架是Java开发者必备的工具之一。它提供了一个统一的...

    Quartz 定时任务web使用

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...

    springmvc中实现quartz定时任务

    在Spring MVC中实现Quartz定时任务的步骤如下: 1. **引入依赖**:首先,你需要在项目中引入Quartz相关的jar包,如`quartz.jar`。如果使用Maven或Gradle,可以在pom.xml或build.gradle中添加对应的依赖项。 2. **...

    springboot整合Quartz实现动态配置定时任务源码

    为了实现动态配置定时任务,我们可以利用SpringBoot的配置文件(如`application.yml`或`application.properties`)来存储定时任务的配置信息,然后在运行时读取这些配置并更新Quartz的任务。 ```yml quartz: jobs:...

    Quartz.net-定时任务 Demo

    这个"Quartz.net-定时任务 Demo"示例将展示如何利用Quartz.NET来安排代码在指定时间后执行,比如几十分钟后的场景。 Quartz.NET的核心概念包括Job(工作)、Trigger(触发器)和Scheduler(调度器)。Job是你要执行...

    SSH+quartz实现的可动态配置时间规则的定时任务

    SSH+quartz实现的可动态...它利用Spring的DI和AOP,Struts的MVC,Hibernate的数据持久化,以及Quartz的灵活调度能力,实现了对定时任务的全面管理和控制。这样的系统对于企业的日常运营和自动化工作流有着重要的价值。

    dotnet-用abpvNext快速开发QuartzNET定时任务管理界面

    本篇文章将深入探讨如何利用abp vNext与Quartz.NET集成,快速构建一个定时任务管理界面。 首先,让我们了解Quartz.NET的基本概念。Quartz.NET是一个完全由.NET编写的,基于JDBC作业存储的作业调度库。它支持多种...

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

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

Global site tag (gtag.js) - Google Analytics