Quartz 的使用

项目代码:

https://github.com/yuleiqq/quartz_example/tree/master/quartz_study

使用Quartz 的调度器之前,需要先实例化该调度器(Scheduler) . 实例化完成之后,就可以启动它了.

在启动调度器之前,或者在调度器处于暂停状态时,触发器不会触发(作业不会执行)。

下面来看实际的代码

1、定义一个任务Job ,打印当前的时间

package com.example01.job;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;


/**
 * @author :  yulei
 * @data :  2020/1/15 16:07
 * @Version :  1.0
 **/

public class HelloJob  implements Job {
    private static Logger log = LoggerFactory.getLogger(HelloJob.class);

    public void execute(JobExecutionContext context) throws JobExecutionException {
        //打印当前日期
        log.debug("Hello World! - " + new Date());
    }
}

2、定义触发器,并绑定到调度器

package com.example01;

import com.example01.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
import java.util.concurrent.TimeUnit;

import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.newTrigger;

/**
 * @author :  yulei
 * @data :  2020/1/15 15:58
 * @Version :  1.0
 **/

public class SimpleExample {

    private   Logger log = LoggerFactory.getLogger(SchedulerTest.class);

    public void  run () throws Exception {
        //实例化调度器
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();


        //定义一个JobDetail ,并绑定到我们的 Job 。 JobBuilder 用户来实例化JobDetail
        JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();

        Date runTime = evenMinuteDate(new Date());


        //定一个触发器Trigger, 立即运行,之后每隔40秒一次
        Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();

        //告诉调度器使用trigger 调度我们的job
        scheduler.scheduleJob(job, trigger);
        log.info(job.getKey() + " will run at: " + runTime);

        //启动调度器 , 在启动调度器之前,任务和触发器不会运行
        scheduler.start();
        log.info("------- Started Scheduler -----------------");
        log.info("------- Waiting 65 seconds... -------------");

        //休眠65秒,让任务有机会执行
        TimeUnit.SECONDS.sleep(65);

        // 关闭调度器
        log.info("------- Shutting Down ---------------------");
        scheduler.shutdown(true);
        log.info("------- Shutdown Complete -----------------");
    }


    public static void main(String[] args) throws Exception {
        SimpleExample  simpleExample = new SimpleExample();
        simpleExample.run();

    }

}

运行打印内容如下:

[INFO] 15 一月 04:25:19.857 下午 main [org.quartz.impl.StdSchedulerFactory]
Using default implementation for ThreadExecutor

[INFO] 15 一月 04:25:19.914 下午 main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl

[INFO] 15 一月 04:25:19.916 下午 main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.3.0 created.

[INFO] 15 一月 04:25:19.919 下午 main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized.

[INFO] 15 一月 04:25:19.928 下午 main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.3.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.


[INFO] 15 一月 04:25:19.928 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'

[INFO] 15 一月 04:25:19.928 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.3.0

[INFO] 15 一月 04:25:19.956 下午 main [com.example01.SchedulerTest]
group1.job1 will run at: Wed Jan 15 16:26:00 CST 2020

[INFO] 15 一月 04:25:19.958 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED started.

[INFO] 15 一月 04:25:19.958 下午 main [com.example01.SchedulerTest]
------- Started Scheduler -----------------

[INFO] 15 一月 04:25:19.959 下午 main [com.example01.SchedulerTest]
------- Waiting 65 seconds... -------------

[DEBUG] 15 一月 04:26:00.012 下午 MyScheduler_Worker-1 [com.example01.job.HelloJob]
Hello World! - Wed Jan 15 16:26:00 CST 2020

[INFO] 15 一月 04:26:24.961 下午 main [com.example01.SchedulerTest]
------- Shutting Down ---------------------

[INFO] 15 一月 04:26:24.961 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED shutting down.

[INFO] 15 一月 04:26:24.961 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED paused.

[INFO] 15 一月 04:26:25.148 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED shutdown complete.

[INFO] 15 一月 04:26:25.148 下午 main [com.example01.SchedulerTest]
------- Shutdown Complete -----------------

程序只执行一次,因为还没有使用周期性调度.

扫描二维码关注公众号,回复: 8675304 查看本文章
发布了192 篇原创文章 · 获赞 254 · 访问量 76万+

猜你喜欢

转载自blog.csdn.net/yulei_qq/article/details/103990960