Quartz基本使用

摘要:
此接口中只有一个方法voicexecute2.2 JobDetail:JobDetail表示特定的可执行调度器。作业是可执行调度程序要执行的内容。此外,JobDetail还包含任务调度方案和策略。L使用JobDetail包装作业,这些作业是任务对象,可以计划使用Trigger自定义何时调用任务对象。

1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样。在了解它之前,首先熟悉几个概念。

2.基本概念

2.1 Job:表示一个工作,要执行的具体内容。此接口中只有一个方法      void execute(JobExecutionContext context)

2.2 JobDetail:JobDetail 表示一个具体的可执行的调度程序, Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。

2.3 Trigger 代表一个调度参数的配置,什么时候去调。

2.4  Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。

解释:
l 编写 job 实现业务,要做什么具体事情问题。
l 使用 JobDetail 包装 job,是任务对象,可以被调度
l 使用 Trigger (触发器对象)定制什么时候去调用某任务对象。
l 使用 Scheduler 结合任务对象和触发器对象,很像一个大管家。

3.运行原理

Quartz基本使用第1张

下面实例:开启大管家,启动,关闭

引入相应的jar包

  <dependencies>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.3</version>
        </dependency>
        <!-- slf4j log4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

Job:

package com.quartz.job;

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

public class HelloJob implements Job {

    /*
     * set方法
     * */
    private String message;
    
    private Float math;
    
    
    public String getMessage() {
        return message;
    }


    public void setMessage(String message) {
        this.message = message;
    }


    public Float getMath() {
        return math;
    }


    public void setMath(Float math) {
        this.math = math;
    }


    @Override
    public void execute(JobExecutionContext context)throws JobExecutionException {
        
        /*String mes = (String) context.getJobDetail().getJobDataMap().get("message");
        System.out.println("jobdetail's message:  "+mes);
        
        Float ms = (Float) context.getTrigger().getJobDataMap().get("math");
        System.out.println("trigger's math:  "+ms);*/
        
        
        System.out.println("jobdetail's message:  "+message);
        System.out.println("trigger's math:  "+math);
        System.out.println("业务逻辑处理中...");
    }
}

jobdetail,Trigger ,Scheduler :

package com.quartz.scheduler;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.quartz.job.HelloJob;

public class TestQuartz {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        
//        定义jobdetail
        JobDetail jb = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myjob", "group1")
                .usingJobData("message", "hello,Myjobdetail")
                .build();
        
        System.out.println("jobDetail's name:  "+jb.getKey().getName());
        System.out.println("jobDetail's group:  "+jb.getKey().getGroup());
        System.out.println("jobDetail's jobclass:  "+jb.getJobClass().getName());
        
//        定义trigger
        CronTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("mytrigger","group1")
                .startNow()
                .usingJobData("math", 3.15f)
//                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
                .build();
        
//        创建scheduler
        StdSchedulerFactory ssf = new StdSchedulerFactory();
        Scheduler sc = ssf.getScheduler();
        sc.start();
        sc.scheduleJob(jb, trigger);
        
//        两秒挂起
        Thread.sleep(2000L);
        sc.standby();
        
        Thread.sleep(2000L);
        sc.start();
        
//        sc.shutdown(false); //直接关闭Scheduler
//        sc.shutdown(true);  //执行完所有的job后关闭Scheduler
        
        
    }
}

这里需要理解一下standBy(),该方法是让scheduler挂起,要想开始直接调用start()方法。shutdown(false)该方法是shutdown()直接关闭scheduler,而shutdown(true)表示等待执行完所有的job后关闭Scheduler。

免责声明:文章转载自《Quartz基本使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小程序点击预览 为什么显示空白WinForm获取窗体关闭原因和是否取消关闭值下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ABP集成Quartz

在 usingAbp.AutoMapper; usingAbp.Modules; usingAbp.Quartz; usingAbp.Reflection.Extensions; usingAbp.Threading.BackgroundWorkers; usingEvaluationSystem.Authorization; usingEvaluatio...

定时任务应该这么玩

1.场景 在电商系统中会经常遇到这样一种场景,就是商品的定时上下架功能,总不能每次都手动执行吧,这个时候我们首先想到的就是利用定时任务来实现这个功能。 目前实现定时任务主要有以下几种方式: JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService; 第三方框架 :使用 Quartz、elastic-j...

Quartz+log4net实现控制台程序定时运行,并且记录日志

c# 控制台程序定时运行,并记录日志。 组件Quartz +log4net Quartz定时运行程序,log4net记录日志。 首先建立控制台程序“QuartzTest” 安装Quartz、log4net这两个组件。如下图流程 安装Quartz 安装log4net 安装完毕后引用里多了如下 然后在项目中添加log4net.config 并将log...

项目中使用Quartz集群分享--转载

原文:http://hot66hot.iteye.com/blog/1726143 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享 一:CRM对定时任务的依赖与问题 二:什么是quartz,如何使用,集群,优化 三:CRM中quartz与Spring结合使用 1:CRM对定时任务的依赖与问题 1)依赖 (1)每天晚上...

Spring定时任务的几种实现

近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java....

iview Input 输入数字验证

验证规则中添加正则 {required: true, pattern: /^[a-z0-9]+$/, message: '请输入数字', trigger: 'change'} //参考 async-validator people: [ { required: true, message: '请输入扫码解锁人数', trigger...