首页 > 编程语言 >java定时定时任务quartz

java定时定时任务quartz

时间:2023-07-18 16:37:21浏览次数:39  
标签:quartz java name 调度 Job Trigger scheduler 定时 JobDetail

Quartz是一个Java版开源定时调度器,功能强悍,使用方便。

一、核心概念

1.Job

表示一个工作,要执行的具体内容,此接口只有一个方法

void execute(JobExecutionContext context)

2.JobDetail

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

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

4.Schedule代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger,当JobDetail和Trigger组合就可以被容器调度。

 

二:例子

   public static void main(String[] args) {
         try {
             //创建scheduler
             Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
 
             //定义一个Trigger
             Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1") //定义name/group
                     .startNow()//一旦加入scheduler,立即生效
                     .withSchedule(simpleSchedule() //使用SimpleTrigger
                             .withIntervalInSeconds(1) //每隔一秒执行一次
                             .repeatForever()) //一直执行,奔腾到老不停歇
                     .build();
 
             //定义一个JobDetail
             // 创建一个JobDetail实例,此版本JobDetail已经作为接口(interface)存在,通过JobBuilder创建
             // 并指定Job在Scheduler中所属组及名称
           //  JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("job1","group1").build();
             JobDetail job = JobBuilder.newJob(MyJob.class) //定义Job类为HelloQuartz类,这是真正的执行逻辑所在
                     .withIdentity("job1", "group1") //定义name/group
                     .usingJobData("name", "quartz") //定义属性
                     .build();
 
             //加入这个调度
             scheduler.scheduleJob(job, trigger);
 
             //启动之
             scheduler.start();
 
             //运行一段时间后关闭
             Thread.sleep(10000);
             scheduler.shutdown(true);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }

 

package quartz;

import org.quartz.*;

import java.util.Date;

/**
 * @author
 * @create 2017-12-12 10:49
 **/
public class MyJob implements Job{

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // JobExecutionContext类提供了调度上线问的各种信息,为JobDetail和Trigger提供必要的信息
        // JobKey是由name和group组成,并且name必须在group内是唯一的。如果只指定一组则将使用默认的组名。
        JobDetail detail = jobExecutionContext.getJobDetail();
        String name = detail.getJobDataMap().getString("name");
        System.out.println("hello " + name + "--- " + new Date());

        /**
         * JobDetail detail = context.getJobDetail();
         String name = detail.getJobDataMap().getString("name");
         System.out.println("say hello to " + name + " at " + new Date());
         */
    }
}

 

 

上面例子很好的展示的Quartz的三个要素

  • Scheduler:调度器。所有的调度都是由它控制。
  • Trigger: 定义触发的条件。例子中,它的类型是SimpleTrigger,每隔1秒中执行一次(什么是SimpleTrigger下面会有详述)。
  • JobDetail & Job: JobDetail 定义的是任务数据,而真正的执行逻辑是在Job中,例子中是HelloQuartz。 为什么设计成JobDetail + Job,不直接使用Job?这是因为任务是有可能并发执行,如果Scheduler直接使用Job,就会存在对同一个Job实例并发访问的问题。而JobDetail & Job 方式,sheduler每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题。

 

转: https://www.cnblogs.com/java-gaolei/p/8027883.html

 

https://blog.csdn.net/qq798867485/article/details/128072743

 

标签:quartz,java,name,调度,Job,Trigger,scheduler,定时,JobDetail
From: https://www.cnblogs.com/fps2tao/p/17563362.html

相关文章

  • Java 中 Json 扁平化与去扁平化处理
    引入依赖<!--依赖--><dependency><groupId>com.github.wnameless.json</groupId><artifactId>json-flattener</artifactId><version>0.16.4</version></dependency>demopublicstaticvoid......
  • crontab 制定定时任务怎么弄
    要使用crontab创建定时任务,请按照以下步骤进行操作:1.打开终端或命令提示符。2.输入以下命令以编辑当前用户的crontab文件:```shellcrontab-e```3.如果是首次编辑crontab文件,系统会要求选择一个文本编辑器。选择你喜欢的编辑器,并按照系统提示进行操作。4.在打开的......
  • Java程序运行机制
    Java程序运行机制1编译型complie-就是一次性把活干完,量大,但是后续有修改需要重新干,比如C/C++,2解释型-用一点,解释一点,性能稍微损失javaScriptpython3程序运行机制4Java偏向解释性语言,不过具有两种类型的特性,先编译,后解释......
  • 在不改变语言的前提下如何推进Java的不断演进
    JamesGosling在“TheFeelofJava”中说到:Java是一种蓝领语言,它并非博士的论文素材而是用于完成工作的语言。各式各样的程序员都非常熟悉Java,因为在设计Java之初我就坚持这样一种观点:选择久经考验的东西而非仅仅是听起来很美。Java所获得的巨大成功证明了这种设计方式是正确的,......
  • Python的布尔值转换为JavaScript的布尔值
    在Python后端开发中,我们返回布尔值通常为True,False。而不是'true','false',但在JavaScript必须使用小写的true和false,且不是字符串。这时就必须在前端对数据进行转换了。后端返回{"status":200,"data":["show":True,"verf":False]}前端转换代码response.data.forEach......
  • java HelloWorld
    HelloWorld1新建一个文件夹,存放代码2新建一个java文件-java后缀名为.java-Hello.java-[注意点]系统可能没有显示文件后缀名,我们需要手动打开3编写代码publicclassHello{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!"......
  • java-自动建表-按月份
    采用的是xxl-job任务调度importorg.apache.commons.io.FileUtils;importcom.xxl.job.core.biz.model.ReturnT;importcom.xxl.job.core.handler.IJobHandler;importcom.xxl.job.core.handler.annotation.XxlJob;importorg.slf4j.Logger;importorg.slf4j.LoggerFactor......
  • 设计模式-组合模式在Java中的使用示例-杀毒软件针对文件和文件夹进行杀毒
    场景组合模式组合模式(CompositePattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。在组合模式中引......
  • javascript-js正则表达式-常用的正则表达式
    js常用的正则表达式1.匹配Email地址:constemailRegex=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;2.匹配URL:consturlRegex=/^(https?:\/\/)?([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(:[0-9]+)?(\/[^\s]*)?$/;3.匹配日期(YYYY-MM-DD):constdateRegex=/^\d{4}-(0[1-9]|......
  • 介绍社交论坛问答发帖系统源码-java+vue+uniapp开发前后端
    前后端分离社交论坛问答发帖BBS源码,社交论坛小程序|H5论坛|,app论坛是java+vue+uniapp开发的前后端分离社交论坛问答发帖/BBS项目,包括论坛图文帖,视频,圈子,IM私聊,微信支付,付费贴,积分签到,钱包充值等论坛小程序论坛app完整功能演示地址:www.runruncode.com/java/19462.html ......