`
baobeituping
  • 浏览: 1068250 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Quartz定时任务框架学习总结

阅读更多

首先关于Quartz的一篇详细介绍的文章可以参考我博客中的一篇关于介绍该框架的文章。

 

 

我做的该项目是一个网站预警系统,通过自己定义一个抽象类,采用策略模式,然后相关的监控子程序继承该类,配置配置文件的方式集成到预警系统中。

 

首先我通过我的主客户端程序的例子来解释Quartz来介绍我常用到的API

注释:QUARTZ中首先是一个组对应多个trigger

package client;

import org.dom4j.Document;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

import com.util.DataUtil;
import com.util.Log;
import com.util.PrintUtil;
import com.util.XmlHandle;

public class Client {

 /**
  * @param args
  */
 public static XmlHandle xmlHandle = XmlHandle.getInstance();
 public static Document document ;
 
 public static String TRIGGER_GROUP="JOBCN_GROUP_MAIL";//我自己制定的组名称,指定名称
 public static void main(String[] args) {
  document = xmlHandle.getXmlFromFile("conf\\alarm-config.xml");
  try {
    String reload = xmlHandle.getSingleXmlData(document,"/conf","reload");
    
    SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    Scheduler scheduler = schedulerFactory.getScheduler();
    if("".equals(reload)||reload==null||"true".equals(reload))
    {
     
    }
    //如果重启Client端,那么首先将所有的任务队列全部删除,然后重新组装CLIENT端
    String[] triggerGroups = scheduler.getTriggerGroupNames();//该方法是得到所有的组名称
    for (int i = 0; i < triggerGroups.length; i++) {
      String[] triggers = scheduler.getTriggerNames(triggerGroups[i]);//该方法是得到该组里面所有的trigger
      for (int j = 0; j < triggers.length; j++) {

       Trigger tg = scheduler.getTrigger(triggers[j],
         triggerGroups[i]);
       
       if (tg instanceof CronTrigger)
       {
        //System.out.println(tg.getFullName()+":"+TRIGGER_GROUP+"."+"CronTrigger_"+bean.getClassName());
        //System.out.println(tg.getJobName()+":"+tg.getJobGroup());
        scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());//该方法是删除指定的任务,传入的是trigger的名字和组名
        
       }
      }
    }
    
    JobDetail jobDetail = new JobDetail("JOB_MAIL", "Group_MAIL",AlarmClient.class);
    //①-1:创建CronTrigger,指定组及名称 

   JobDataMap dataMap = new JobDataMap();
     dataMap.put("bean", bean);//我们可以将我们要传入的某个类通过JobDataMap的载体传到对应的job中
     jobDetail.setJobDataMap(dataMap);
    CronTrigger cronTrigger = new CronTrigger("CronTrigger_MAIL",TRIGGER_GROUP);
    CronExpression cexp = new CronExpression("0/30 * * * * ?");//①-2:定义Cron表达式
    cronTrigger.setCronExpression(cexp);//①-3:设置Cron表达式
    scheduler.scheduleJob(jobDetail, cronTrigger);//④ 注册并进行调度
    scheduler.start();
   
  
 } catch (Exception e) {
  //e.printStackTrace();
 }

 }

}

具体任务类的定义,只注明主体方法:

public void execute(JobExecutionContext jobCtx) throws JobExecutionException {

  //我们制定一个具体的任务,必须实现execute方法,该方法传入一个job的上下文,通过下面的代码来得到保存在datamap中的数据,注意,如果要通过载体传输的数据一定要实现Serializable接口

例如:我们传的 public class AlarmBean implements Serializable
  JobDetail jobDetail =jobCtx.getJobDetail();  

  JobDataMap dataMap = jobDetail.getJobDataMap();  

  this.bean = getBean(dataMap);
  
  System.out.println("Test:"+bean.getMailHost());
 }

 

public AlarmBean getBean(Map map)
 {
  AlarmBean beans = null;
  Iterator it = map.entrySet().iterator();
     while(it.hasNext())
     {
       try {
     Map.Entry m = (Map.Entry) it.next();
     beans = (AlarmBean) m.getValue();
    } catch (Exception e) {
     e.printStackTrace();
    }
     }
   return beans;
 }

 

 

 

 

 

 

Quartz中SimpleTrigger的探讨

让我们继续用第一个例子中StringTest.
1.来写一个每隔10秒启动一次任务的例子.

import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleTriggerTest
{

    
public static void main(String[] args) throws Exception
    
{
        SchedulerFactory schedulerFactory 
= new StdSchedulerFactory();
        Scheduler scheduler 
= schedulerFactory.getScheduler();
        
// 系统当前时间10秒后
        long startTime = System.currentTimeMillis() + 10000L;
        SimpleTrigger trigger 
= new SimpleTrigger("myTrigger"nullnew Date(
                startTime), 
null00L);

        JobDetail jobDetail 
= new JobDetail();
        jobDetail.setJobClass(StringTest.
class);
        jobDetail.setName(
"test");
        jobDetail.setGroup(
"A");

        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();
    }

}



2.创建一个触发器,立即启动,每隔60秒,启动一次.
SimpleTrigger trigger = new SimpleTrigger("myTrigger",
                                            
null,
                                            
new Date(),
                                            
null,
                                            SimpleTrigger.REPEAT_INDEFINITELY,
                                            
60L * 1000L);
3.创建一个触发器,立即启动.从现在开始的第10秒到第40秒重复运行.
long endTime = System.currentTimeMillis() + 40000L;

  SimpleTrigger trigger 
= new SimpleTrigger("myTrigger",
                                            
"myGroup",
                                            
new Date(),
                                            
new Date(endTime),
                                            SimpleTrigger.REPEAT_INDEFINITELY,
                                            
10L * 1000L);
4.创建一个触发器,在2008年5月9日,上午10点半执行,重复5次,每隔30秒一次.
java.util.Calendar cal = new java.util.GregorianCalendar(2008, cal.MARCH, 9);
  cal.set(cal.HOUR, 
10);
  cal.set(cal.MINUTE, 
30);
  cal.set(cal.SECOND, 
0);
  cal.set(cal.MILLISECOND, 
0);

  Data startTime 
= cal.getTime()

  SimpleTrigger trigger 
= new SimpleTrigger("myTrigger",
                                            
null,
                                            startTime,
                                            
null,
                                            
5,
                                            
30L * 1000L);

仔细体会SimpleTrigger的例子,你会发现用这个制作执行计划会更简单方便.

分享到:
评论

相关推荐

    基于quartz定时任务框架.rar

    Quartz定时任务框架适用于各种需要定期执行操作的场景,如数据备份、报表生成、系统维护、邮件发送等。在本项目中,你可以根据提供的代码学习如何构建一个易于维护和扩展的定时任务系统,同时也可以看到如何实现对...

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

    总结,本Demo旨在通过SSM+Quartz的组合,提供一个可扩展的定时任务管理平台,开发者可以根据实际需求,调整任务逻辑和调度策略,以满足各种业务场景。同时,通过学习这个Demo,开发者可以深入理解Java定时任务的实现...

    Quartz定时任务简单列子

    这个"Quartz定时任务简单列子"可能是一个简单的教程或者示例项目,用于展示如何在Java应用中集成和使用Quartz来执行预定的任务。 Quartz的核心概念包括Job(工作)、Trigger(触发器)和Scheduler(调度器)。Job是...

    Quartz 定时任务web使用

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

    Java分布式Elastic-Job和Quartz定时任务课程(1.6G)

    4_主流定时任务框架优缺点和什么是分布式定时任务.mp4 5_环境搭建总体流程.mp4 6_前期准备-JDK.mp4 7_前期准备-Maven.mp4 8_前期准备-MySQL.mp4 9_前期准备-Zookeeper.mp4 10_知识点检测与小结.mp4 11_Elastic-Job...

    quartz 定时任务调度

    总结,Quartz定时任务调度是Java开发中不可或缺的工具,尤其对于需要定时执行任务的系统来说。通过学习和掌握Quartz的使用,以及cron表达式的编写,我们可以构建出强大且灵活的任务调度系统。同时,利用插件系统和...

    定时任务quartz及教程

    Quartz是Java领域中广泛应用的一款开源的作业调度框架,它允许开发者在应用程序中安排复杂的定时任务。本教程将深入探讨Quartz的核心概念、配置、API使用以及如何在实际项目中集成和管理定时任务。 一、Quartz核心...

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

    本项目“Springboot2-Quartz 后台可动态配置的定时任务”是基于SpringBoot 2.x版本与Quartz Scheduler整合的一个示例,它展示了如何在后台管理系统中动态地创建、更新和删除定时任务,以及监控这些任务的状态,为...

    Quartz 定时任务依赖包 jar包

    Quartz是一款开源的作业调度框架,它允许开发者在Java应用程序中定义和执行复杂的定时任务。在Java世界中,Quartz是广泛使用的计划任务库,它提供了丰富的API来创建、调度和管理作业。这个"Quartz 定时任务依赖包 ...

    C# quartz.net 定时任务源码 可以远程控制

    【标题】"C# quartz.net 定时任务源码 可以远程控制"涉及的核心知识点主要集中在C#编程语言、Quartz.NET库以及系统服务的安装与管理。Quartz.NET是一个开源的作业调度框架,它允许开发人员在.NET环境中创建和执行...

    spring quartz定时任务demo

    本文将详细解析“spring quartz定时任务demo”这个项目,它提供了实现Java定时任务的实例,便于快速理解和应用。 首先,Quartz是一个开源的作业调度框架,支持复杂的调度策略,可以创建、调度和执行重复或一次性...

    定时任务完整案例 Java quartz

    中的"完整的定时任务案例,导入Eclipse或者MyEclipse即可使用"意味着这个压缩包包含了一个可以运行的示例项目,开发者可以通过导入到Eclipse或MyEclipse这样的IDE中快速理解和学习如何设置和运行Quartz定时任务。...

    Quartz定时任务完全攻略

    总结,Quartz定时任务完全攻略涵盖了从基础概念理解到实战应用的方方面面。通过学习和掌握Quartz,开发者可以有效地管理和调度Java应用中的定时任务,提升系统的自动化水平和效率。在实际项目中,结合Quartz提供的...

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

    这个"quartz定时任务Demo"是一个可以直接在Eclipse集成开发环境中运行的实例,它提供了清晰的注释,方便初学者理解和学习。 1. **Quartz基本概念** - **Job**:作业是实际执行的任务,是实现了`org.quartz.Job`...

    furion内置的定时任务使用学习,动态添加定时任务代码

    首先,Furion的定时任务模块允许开发者方便地创建和管理计划任务,无需依赖外部库如Quartz.NET或Hangfire。通过简单的API调用,开发者可以轻松地设置任务执行频率、执行逻辑以及持久化策略。 `...

    分布式quartz定时任务学习

    分布式Quartz定时任务学习是现代企业级应用中一个重要的技术领域,尤其是在大数据处理、系统维护、数据同步等场景下,其重要性不言而喻。Quartz是一个开源的作业调度框架,它允许开发者定义和执行复杂的任务调度策略...

    QuartZ定时任务例子

    以下是对QuartZ定时任务的一些关键知识点的详细说明: 1. **基本概念**: - **Job**:QuartZ中的核心组件,代表一个可执行的任务。 - **Trigger**:触发器,定义了何时执行Job。 - **Scheduler**:调度器,负责...

    定时任务框架Quartz Demo

    Quartz是一款开源的Java定时任务框架,用于在Java应用程序中创建和管理定时任务。它提供了丰富的API和功能,使得开发者可以灵活地定义和调度任务,实现应用中的周期性任务执行。在"定时任务框架Quartz Demo"项目中,...

    Quartz.net-定时任务 Demo

    总之,Quartz.NET是一个功能强大的.NET定时任务框架,能够满足各种复杂的定时需求。通过学习和实践这个"Quartz.net-定时任务 Demo",你将能够熟练地在自己的项目中使用Quartz.NET来创建和管理定时任务。

Global site tag (gtag.js) - Google Analytics