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

对quartz使用框架调度总结

阅读更多

在项目中的使用需求:

1.可以使用一个A程序定期的去扫描配置文件,然后加载配置文件中的定时任务。

2.也可以随时修改配置文件,使A立即重新加载配置文件

 

 

我首先定义一个主程序A,A中定义的时间是半个小时重新加载配置文件。

A程序实例:

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 execute()
 {
  document = xmlHandle.getXmlFromFile(Config.CONFIG_PATH);
  try {
   SchedulerFactory schedulerFactory = new StdSchedulerFactory();
   Scheduler scheduler = schedulerFactory.getScheduler();
   // 如果重启Client端,那么首先将所有的任务队列全部删除,然后重新组装CLIENT端
   String[] triggerGroups = scheduler.getTriggerGroupNames();
   for (int i = 0; i < triggerGroups.length; i++) {
    String[] triggers = scheduler.getTriggerNames(triggerGroups[i]);
    for (int j = 0; j < triggers.length; j++) {
     Trigger tg = scheduler.getTrigger(triggers[j],
       triggerGroups[i]);

     if (tg instanceof CronTrigger) {

     //在这里要注意,因为Client是删除所有的当前任务然后再重新加载的,但这里不能将调用Client的AppClient的任务删除
      if ( tg.getFullName().equals(TRIGGER_GROUP+"."+"CronTrigger_LISTENING")) {// ②-1:根据名称判断
      // scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
      }
      else
      {
       scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
      }
      
     }
     if (tg instanceof SimpleTrigger) {
      scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
     }
    }
   }
   // 创建一个触发器,立即启动,每隔半小时重新加载所有任务,即半小时重新运行AlarmClient的JAVA类.
   JobDetail jobDetail = new JobDetail("JOB_MAIL", "Group_MAIL",
     AlarmClient.class);
     SimpleTrigger simpletrigger = new SimpleTrigger(
     "SimpleTrigger_MAIL", TRIGGER_GROUP, new Date(), null,
     SimpleTrigger.REPEAT_INDEFINITELY, 30L * 1000L);
   scheduler.scheduleJob(jobDetail, simpletrigger);// ④ 注册并进行调度
   PrintUtil.printConsole("主程序开始执行...");
   scheduler.start();

     } catch (Exception e) {
   e.printStackTrace();
  }
 }

}

 

AlarmClient的程序主要任务就是去读取配置文件,然后根据配置文件中的指定的名称加载所有的子任务。

 

需求变更,因为有些子任务配置到主程序中,要立即加载到人物队列中。第一种方法就是重启Client.java,现在考虑是否有别的方式实现。我于是想到,另外定义一个客户端,在主配置文件中定义一个reload的标示,定时去扫描该标示,如果为true那么就重新加载,如果为FALSE就不重新加载。

 

AppClient.java

package client;

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

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

public class AppClient {

 /**
  * @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(Config.CONFIG_PATH);
  
  try {
   SchedulerFactory schedulerFactory = new StdSchedulerFactory();
   Scheduler scheduler = schedulerFactory.getScheduler();
   // 如果重启Client端,那么首先将所有的任务队列全部删除,然后重新组装CLIENT端
   String[] triggerGroups = scheduler.getTriggerGroupNames();
   for (int i = 0; i < triggerGroups.length; i++) {
    String[] triggers = scheduler.getTriggerNames(triggerGroups[i]);
    for (int j = 0; j < triggers.length; j++) {
     Trigger tg = scheduler.getTrigger(triggers[j],
       triggerGroups[i]);

//开始这个程序,首先就将任务队列中的所有任务全部干掉。然后开启任务ClientReloadListening.class,该类主要是调用Client.java程序

     if (tg instanceof CronTrigger) {
             scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());      
     }
     if (tg instanceof SimpleTrigger) {
      scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
     }
    }
   }
   // 创建一个触发器,立即启动,每隔10秒扫描主配置文件.
   JobDetail jobDetail = new JobDetail("JOB_LISTENING", "Group_LISTENING",
     ClientReloadListening.class);
   
     //①-1:创建CronTrigger,指定组及名称
     CronTrigger cronTrigger = new CronTrigger("CronTrigger_LISTENING",TRIGGER_GROUP);
     CronExpression cexp = new CronExpression("0/10 * * * * ?");//①-2:定义Cron表达式//每隔10秒钟扫描一次主配置文件,如果reload为true,那么就立即重新加载。默认主程序是半个小时重新加载一次
     cronTrigger.setCronExpression(cexp);//①-3:设置Cron表达式
     scheduler.scheduleJob(jobDetail, cronTrigger);//④ 注册并进行调度
     scheduler.start();
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}

 

任务类ClientReloadListening.java

package client;

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

import com.util.Config;
import com.util.XmlHandle;

public class ClientReloadListening implements Job {

 public static XmlHandle xmlHandle = XmlHandle.getInstance();
 public static Document document;
 public void execute(JobExecutionContext jec) throws JobExecutionException {
  document = xmlHandle.getXmlFromFile(Config.CONFIG_PATH);

//该行代码就是去读取主配置文件中<reload>true</reload>节点的值,如果为TRUE那么就调用Client.execute()
  String reload = xmlHandle.getUniqueNodeDataFromXml(document,"/conf/action","reload");
  System.out.println(reload);
  if("true".equals(reload))
  {
   Client.execute();
  }

 }

}

分享到:
评论

相关推荐

    Quartz调度框架应用总结

    Quartz调度框架应用总结

    quartz开源作业调度框架

    #### 一、Quartz框架简介 Quartz是一个功能强大的、开源的作业调度框架,完全由Java编写而成。它能够被应用在服务器端的Java应用程序中,帮助开发者轻松地创建并管理定时任务。Quartz支持多种复杂的触发规则,并且...

    Quartz - 作业调度框架

    总结来说,Quartz是一个强大且灵活的作业调度框架,它使得在Java应用中实现定时任务变得简单。通过定义Job和Trigger,我们可以轻松地创建复杂的调度逻辑,同时,其丰富的特性如集群支持、持久化和监听器,确保了在...

    学习笔记_Quartz作业调度框架,使用corn表达式

    了解和掌握Quartz框架以及Corn表达式,对于进行定时任务的管理和调度至关重要。它可以帮助你在项目中实现自动化任务,如定期备份、数据清理、定时发送邮件等,从而提高效率,减轻维护负担。 在提供的压缩包文件`...

    Quartz作业调度框架

    Quartz框架为企业应用中的作业调度提供了一个强大而灵活的解决方案。 Quartz的发展历程始于其开源项目的建立,通过不断的发展,它已经成为一个成熟的框架。开发人员可以通过下载安装Quartz,也可以通过从源代码构建...

    Quartz任务调度框架教程中文版

    Quartz任务调度框架教程中文版 chm格式

    quartz任务调度框架简单实用小demo

    Quartz是一个开源的作业调度框架,它为Java应用程序提供了强大的定时和计划功能。在Java项目中,Quartz常被用来执行周期性的任务,比如数据备份、日志清理、定时发送邮件等。本“quartz任务调度框架简单实用小demo”...

    任务调度开源框架Quartz

    通过阅读《任务调度框架Quartz.doc》文档,你将能够深入理解Quartz的内部机制,学习如何创建和配置作业与触发器,以及如何在实际项目中集成和使用Quartz。文档可能还会涵盖Quartz的源码分析,这对于想要定制或优化...

    quartz3种调度形式+传参.zip

    在不依赖任何框架的情况下,直接使用Quartz API进行任务调度。首先,你需要创建一个Job类,实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法。然后,定义Trigger来决定任务何时执行,...

    基于Quartz.Net 的任务调度计划框架

    Quartz.Net是一个强大的开源任务调度框架,用于在.NET环境中创建和执行定时任务。它提供了灵活的调度机制,允许开发者在应用程序中定义复杂的作业执行规则,从而实现自动化的工作流程。Quartz.NET不仅支持简单的定时...

    Spring整合任务调度框架Quartz

    Spring 整合任务调度框架 Quartz ...Spring 整合任务调度框架 Quartz,可以使用配置文件方式或 Quartz 持久化方式来实现任务调度。开发者可以根据实际情况选择合适的方式,从而提高软件系统的自动化和可靠性。

    Java任务调度框架Quartz教程实例

    Quartz框架支持创建简单或复杂的调度计划,能够高效地执行从少量到成千上万的任务。 #### 二、Quartz的核心概念 Quartz框架的核心概念主要包括四个部分:Scheduler(任务调度)、Job(任务)、Trigger(触发器)...

    quartz动态定时调度完整代码

    Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java开发环境中,Quartz被广泛用于实现应用程序的自动化任务调度。这个压缩包“quartz动态定时调度完整代码”提供了使用Quartz进行动态...

    任务调度框架Quartz

    1.高度灵活性:Quartz 允许开发人员灵活地定义触发器的调度时间表,可以对触发器和任务进行关联映射。 2.持久化机制:Quartz 提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务...

    Quartz(作业调度)

    Quartz是一款开源的作业调度框架,它为Java应用程序提供了强大的定时任务处理能力。在Spring框架中,Quartz可以被集成来实现复杂的定时任务调度。本文将深入探讨Quartz的使用,包括其基本概念、配置、API以及在Web...

    quartz 定时任务调度

    Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中实现复杂的时间调度任务。它允许开发者定义定时任务,这些任务会在指定的时间点自动执行。Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架...

    Spring集成Quartz调度框架.pdf

    Quartz框架负责按照预设的规则调度这些作业的执行。 **触发器**(Trigger):触发器定义了作业的执行时间点。Quartz提供了多种类型的触发器,包括简单触发器(Simple Trigger)、日历间隔触发器(Calendar Interval...

    Quartz一个开源作业调度框架

    Quartz 是一个强大的开源作业调度框架,主要用于自动化执行任务,如定时发送邮件、执行数据清理、执行批处理等。该框架完全用 Java 编写,兼容 J2SE 和 J2EE 环境,提供了丰富的功能和灵活性,使得开发者能够方便地...

    利用Quartz实现任务调度的集群

    【Quartz任务调度集群】是Java开发中解决定时任务需求的一种高效方案,它由OpenSymphony团队开发,自2001年...总之,Quartz为Java开发者提供了一个强大且易用的任务调度框架,使得构建可靠的定时任务系统变得更加便捷。

Global site tag (gtag.js) - Google Analytics