Quartz的简单入门

简介: Quartz的简单入门

Quartz简单理解

Quartz是一个任务调度框架。比如你遇到这样的问题

  • 想每天早上8点给自己定一个闹钟
  • 想每年2月14日自己给自己的女神发一封贺卡
  • 想每隔2个小时,下载一部小电影到云盘

这些问题总结起来就是:在某一个指定的的时间段内干某件事。并且时间的触发的条件可以非常复杂(比如每月最后一个工作日的17:50),复杂到需要一个专门的框架来干这个事。 Quartz就是来干这样的事,你给它一个触发条件的定义,它负责到了时间点,触发相应的Job起来干活。

一个简单的示例

package cn.quartz.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 
 * 一个数据库备份的工作
 *
 * @author JP
 * @create 2019/1/17 0017
 * @since 1.0.0
 */
public class HelloJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //输出时间
        Date date=new Date();
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time=format.format(date);
        System.out.println("正在进行数据库备份工作,备份时间是:"+time);
    }
}

几个概念搞清楚先:

  • 触发器 Trigger: 什么时候工作
  • 任务 Job: 做什么工作
  • 调度器 Scheduler: 搭配 Trigger和Job
package cn.quartz.main;
import cn.quartz.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
 *
 *
 * @author JP
 * @create 2019/1/17 0017
 * @since 1.0.0
 */
public class HelloSchedulerDemo {
    public static void main(String[] args) throws Exception {
        //1.调度器(Scheduler) ,从工厂中获取调度实例(默认:实例化 new StdSchedulerFactory();)
        Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();
        //2.任务实例
       JobDetail jobDetail= JobBuilder.newJob(HelloJob.class)
                //加载任务类,与hellojob完成绑定
                .withIdentity("job1","group")
                //参数1:任务的名称(唯一实例);参数2:任务组的名称
              .build();
        //3.触发器(Tigeer)
       Trigger trigger= TriggerBuilder.newTrigger()
                .withIdentity("trigger","group1")
                //参数1:触发器名称  参数2:组名称
                .startNow()   //马上启动
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)     //每过5秒执行一次  
                .withRepeatCount(5))    //共执行6次     换成repeatForever() 的话,一直执行
                .build();
       //调度器关联任务和触发器,保证按照触发器定义条件执行任务
        scheduler.scheduleJob(jobDetail,trigger);
        //启动
        scheduler.start();
        //等待30秒,让前面的任务都执行完了之后,再关闭调度器
            Thread.sleep(30000);
        scheduler.shutdown(true);
    }
}

执行效果

20200401134307494.png



相关文章
|
9月前
|
Java 调度
quartz(一)基础篇
quartz(一)基础篇
42 0
quartz学习笔记7:trading
quartz学习笔记7:trading
50 0
|
开发框架 Java API
【Quartz学习总结】——入门程序
【Quartz学习总结】——入门程序
55 0
【Quartz学习总结】——入门程序
Quartz - 入门案例
Quartz - 入门案例
64 0
|
Java 应用服务中间件
Quartz - 基础篇(下)
Quartz - 基础篇(下)
136 0
Quartz - 基础篇(下)
Quartz - 基础篇(上)
Quartz - 基础篇(上)
92 0
Quartz - 基础篇(上)