`

quartz 任务的增删改

阅读更多

从网上找了好多例子,要么太老,要么用不了。无奈,硬着头皮自己来一个。希望对路过的朋友有帮助。。。

QuartzJob

import java.text.SimpleDateFormat;
import java.util.Date;

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

/**
 * @Description: 任务执行类
 *
 * @author 那是一条神奇的天路
 * @date 2015-12-22
 * @version V1.0
 */
public class QuartzJob implements Job {

  public void execute(JobExecutionContext arg0) throws JobExecutionException {
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "★★★★★★★★★★★");  
  }
}

 QuartzManager

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @Description: 任务执行类
 *
 * @author 那是一条神奇的天路
 * @date 2015-12-22
 * @version V1.0
 */
public class QuartzManager {
  private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
  private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";

  /**
   * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
   * 
   * @param jobName 任务名
   * @param cls 任务
   * @param time 时间设置,参考quartz说明文档
   */
  public static void addJob(String jobName, Class cls, String time) {
    try {
        Scheduler scheduler = schedulerFactory.getScheduler();//创建一个触发器表
        JobDetail jobDetail = JobBuilder.newJob()//创建一个jobbuilder用来定义一个任务明细。
                .ofType(cls)//设置类,将被实例化
                .withIdentity(new JobKey(jobName, JOB_GROUP_NAME))//使用给定的名称和默认组jobkey识别任务明细
                .build();//产品定义的JobDetail实例这jobbuilder。
 
        Trigger trigger = TriggerBuilder.newTrigger()
                .withSchedule(CronScheduleBuilder.cronSchedule(time))//设置schedulebuilder将用于定义触发器的表。
                .withIdentity(new TriggerKey(jobName, TRIGGER_GROUP_NAME))
                .build();//创建Trigger
 
        scheduler.scheduleJob(jobDetail,trigger);//绑定
 
      // 启动
      if (!scheduler.isShutdown()) {
    	 // scheduler.start();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
   * @param jobName
   * @param time
   */
  @SuppressWarnings("unchecked")
  public static void modifyJobTime(String jobName, String time ) {
    try {
      Scheduler sched = schedulerFactory.getScheduler();
      
      
      Trigger trigger = TriggerBuilder.newTrigger()
              .withSchedule(CronScheduleBuilder.cronSchedule(time))//设置schedulebuilder将用于定义触发器的表。
              .withIdentity(new TriggerKey(jobName, TRIGGER_GROUP_NAME))
              .build();//创建Trigger
      
      if (trigger == null) {
        return;
      }
      String oldTime = ((CronTrigger) trigger).getCronExpression();
      if (!oldTime.equalsIgnoreCase(time)) {
        JobDetail jobDetail = sched.getJobDetail(new JobKey(jobName, JOB_GROUP_NAME)) ;
        Class objJobClass = jobDetail.getJobClass();
        removeJob(new TriggerKey(jobName, TRIGGER_GROUP_NAME),new JobKey(jobName, JOB_GROUP_NAME));
        addJob(jobName, objJobClass, time);
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
   * @param triggerKey
   * @param jobKey
   */
  public static void removeJob(TriggerKey triggerKey,JobKey jobKey) {
    try {
      Scheduler sched = schedulerFactory.getScheduler();
      sched.pauseTrigger(triggerKey);// 停止触发器
      sched.unscheduleJob(triggerKey);// 移除触发器
      sched.deleteJob(jobKey) ;
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * 启动所有定时任务
   */
  public static void startJobs() {
    try {
      Scheduler sched = schedulerFactory.getScheduler();
      sched.start();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * 关闭所有定时任务
   */
  public static void shutdownJobs() {
    try {
      Scheduler sched = schedulerFactory.getScheduler();
      if (!sched.isShutdown()) {
        sched.shutdown();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
}

 测试

/**
 * 测试类
 * 
 * @author 那是一条神奇的天路
 *
 */
public class QuartzTest {
  public static void main(String[] args) {
    try {
      String job_name = "动态任务调度";
      System.out.println("【系统启动】开始(每1秒输出一次)...");  
      QuartzManager.addJob(job_name, QuartzJob.class, "0/1 * * * * ?");  
//      
      Thread.sleep(5000);  
      System.out.println("【修改时间】开始(每2秒输出一次)...");  
      QuartzManager.modifyJobTime(job_name, "10/3 * * * * ?");  
//      Thread.sleep(6000);  
      System.out.println("【移除定时】开始...");  
//      QuartzManager.removeJob(new TriggerKey(jobName, TRIGGER_GROUP_NAME),new JobKey(jobName, JOB_GROUP_NAME));  
//      System.out.println("【移除定时】成功");  
      QuartzManager.startJobs();
      Thread.sleep(6000);  
      QuartzManager.shutdownJobs();
//      System.out.println("【移除定时】成功");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

 pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>quartz</groupId>
  <artifactId>quartz</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
 	 <dependency>
  	  <groupId>org.quartz-scheduler</groupId>
  	  <artifactId>quartz</artifactId>
   	 <version>2.2.2</version>
	</dependency>
	<dependency>
   	 <groupId>org.quartz-scheduler</groupId>
   	 <artifactId>quartz-jobs</artifactId>
   	 <version>2.2.2</version>
	</dependency>
	</dependencies>
</project>

 

分享到:
评论

相关推荐

    基于Spring的Quartz动态定时任务增删改查

    基于Spring的Quartz动态定时任务增删改查,代码简洁。后端采用SpringMvc+Spring+Mybatis+Quartz,前端采用Bootstrap框架,数据库采用MySQL;完成定时任务动态任务初始化,增删改查

    ssm整合quartz定时任务实现动态增删改查,暂停任务,恢复任务

    ssm整合quartz 并持久化到数据库中,实现动态增删改查,暂停任务,恢复任务等 将链接内的target文件直接放到项目ssmquartztest文件夹下 运行环境: jdk5+tomcat7+mysql+eclipse+maven lib jar包下载地址 地址1:...

    Quartz任务调度器

    Quartz任务调度器是一款强大的开源任务调度框架,广泛应用于Java应用程序中,用于自动化定时任务的执行。它提供了灵活的任务调度机制,使得开发者可以方便地定义、安排和执行各种任务。在与Spring框架整合后,Quartz...

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

    Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...

    quartz动态任务管理

    Quartz是一款开源的作业调度框架,它允许开发者创建、调度和执行各种类型的任务。这个"quartz动态任务管理"源码包很可能是针对Quartz框架的实现,旨在帮助开发者更方便地管理和控制任务的生命周期。 Quartz的核心...

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    在"Quartz.net作业调度自定义定时执行任务多任务执行c#"这个主题中,我们将深入探讨如何使用Quartz.NET来实现自定义的定时任务,以及如何处理多任务执行。 首先,我们需要理解Quartz.NET的基本概念。在Quartz.NET中...

    .net Quartz 任务调度平台源码

    《.NET Quartz 任务调度平台源码解析与应用》 .NET Quartz 是一款强大的任务调度框架,它为.NET开发者提供了一种高效、灵活的方式来安排和执行周期性任务。Quartz.NET 是开源项目Quartz的.NET版本,它允许开发人员...

    Quartz调度、终止执行的任务

    Quartz是一款开源的作业调度框架,它允许开发者创建和安排任务执行。在Java应用程序中,Quartz能够帮助我们在特定的时间点或按照预设的周期执行某些功能,如数据收集、日志清理等。当我们需要终止某个正在运行的任务...

    C# 控制台Quartz定时任务.doc

    【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...

    C# Quartz.Net定时任务操作明细、完整过程

    【C# Quartz.Net定时任务操作】Quartz.Net是一款强大的任务调度框架,广泛应用于C#环境下的定时任务管理。本文将详细介绍如何使用Quartz.Net进行定时任务的配置与执行。 首先,**通过Nuget安装框架**非常简单,只需...

    Quartz 定时任务依赖包 jar包

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

    Quartz如何实现判断某个任务是否正在运行,在项目中用到的,已经测试过了

    在实际项目中,有时我们需要判断一个Quartz任务是否正在运行,以便进行相应的操作,如避免重复执行或者进行状态监控。本文将详细介绍如何在Quartz中实现这一功能。 首先,理解Quartz的工作原理是关键。Quartz通过...

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

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

    Quartz任务监控管理

    在这个名为"Quartz任务监控管理"的项目包中,我们可以预期找到以下几个核心知识点: 1. **Quartz基础知识**:Quartz的核心概念包括Job(作业)、Trigger(触发器)和Scheduler(调度器)。Job是待执行的任务,...

    quartz任务调度使用手册

    Quartz任务调度是一款开源的Java定时任务框架,广泛应用于企业级应用系统中,用于执行周期性的后台任务。这款工具提供了一种灵活的方式来安排和管理任务,使得开发者无需在业务代码中处理时间相关的逻辑,而是通过...

    Quartz任务调度管理

    ### Quartz任务调度管理 #### 一、任务调度基础概念 任务调度是指系统按照预先设定的时间规则来自动执行特定任务的功能。这种机制广泛应用于各种场景,例如数据备份、定期检查资源状态、发送邮件通知等。 ##### ...

    java quartz 定时任务

    Java Quartz 是一个强大的开源任务调度库,用于在Java应用程序中创建和管理定时任务。Quartz 提供了丰富的API,使得开发者能够灵活地定义任务,并精确控制任务的执行时间。本项目利用Quartz 实现了基于Cron表达式的...

    Quartz.Net任务调度

    Quartz.Net是一个强大的任务调度框架,它在.NET环境中被广泛应用,尤其在需要执行定时任务的系统中。Quartz.Net的设计灵感来源于Java的Quartz库,它允许开发者灵活地定义和管理作业(Jobs)以及触发器(Triggers),...

    quartz1.5.0 任务调度demo

    在这个"quartz1.5.0 任务调度demo"中,我们将会探讨如何使用Quartz实现任务的增删改功能,以及其三大核心组件:JobDetail、Trigger和Scheduler。 首先,**JobDetail**是Quartz中的工作类,它定义了一个具体的任务,...

    Quartz定时任务框架

    在给定的压缩包文件中,"lib"目录可能包含了Quartz库的jar文件,这是运行Quartz任务所必需的依赖。为了运行上述代码,你需要确保项目中已经引入了Quartz库,或者将lib目录下的jar文件添加到项目的类路径中。 总之,...

Global site tag (gtag.js) - Google Analytics