我是靠谱客的博主 眼睛大绿茶,最近开发中收集的这篇文章主要介绍Quartz(石英框架)理论基本概念,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基本概念

定义:任务调度开源框架

任务调度:

在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情。

  • 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作。
  • 任务调度涉及多线程并发,线程池维护,运行时间规则解析,运行现场的保护以恢复等方面。

Quartz框架是一个开源的企业级任务调度服务,已经被作为任务调度的良好解决方案。

Quartz对任务调度进行了高度抽象,提出了3个核心概念,并在org.quartz包中通过接口和类进行了描述

任务:就是执行的工作内容。Quartz提供Job接口来支持任务定义

触发器:定义触发Job执行的时间触发规则。Quartz提供Trigger类及其子类支持触发器功能

调度器:Quartz提供了Scheduler接口,将工作任务和触发器绑定,保证任务可以在正确的时间执行

实例:

1.导入坐标依赖:

 <dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>

2.创建实现Job的实现类:

public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("TriggerName:"+jobExecutionContext.getTrigger().getName());
System.out.println("TriggerTime:"+new Date());
System.out.println("JobName:"+jobExecutionContext.getJobDetail().getName());
System.out.println("妈妈喊你回家吃饭");
}
}

3.具体开启任务调度:

//TODO:任务
try {
//1.定义任务对象
JobDetail job = new JobDetail("task1","miaoGroup", MyJob.class);
//2.创建SimpleTrigger触发器(间隔触发)
SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1", "miaoTrigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);
//2.创建CronTrigger触发器(特定触发)
CronTrigger cronTrigger = new CronTrigger("trigger1","miaoTrigger","0 58 10 ? * *");
//3.创建调度器
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.scheduleJob(job,simpleTrigger);
//4.启动调度器
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}

SimpleTrigger: 定义间隔时间节点触发

CronTrigger: 定义特定时间节点触发

Cron表达式:由6~7个由空格分隔的时间元素组成。第7个元素可选。

位置字段含义范围允许的特殊字符
10~59*_/
2分钟0~59*_/
3小时0~23*_/
4月份中哪一天1~31*_/?L
5月份1~12或JAN~DEC*_/
6星期几1~7或SUN~SAT* / ? L #
7年份1970~2099* /

Cron表达式每个字段,都可以显式的规定一个值(如49),一个范围(1-6),一个列表(1,3,5)或者一个通配符(如*)

Cron表达式有几个特殊的字符,说明如下:

“-”:中划线,表示一个范围

“,”:使用逗号间隔的数据,表示一个列表

“*”:表示每一个值,它可以用于所有字段。例:在小时字段表示每小时

"?":该字符仅用于“月份中的哪一天”字段和“星期几”字段,表示不指定值

“/”:通常表示为x/y,x为起始值,y表示值的增长

“L”:表示最后一天,仅在日期和星期字段中使用

“#“:只能用于”星期几“字段,表示这个月的第几个周几。例:”6#3“指这个月第三个周五

排除时间规则

可以使用Quartz提供的Calendar接口来实现,且Quartz提供了多种实现类来满足应用的需求

Calendar名称作用
WeeklyCalendar用于排除星期中的一天或多天
MonthlyCalendar用于排除月份中的数天
AnnualCalendar用于排除年中的一天或多天
HolidayCalendar用于排除节假日

注:Calendar接口是quartz提供的,并非jdk中java.util包下的月历类

例:排除每周一的第一天

//TODO:任务
try {
//1.定义任务对象
JobDetail job = new JobDetail("task1","miaoGroup", MyJob.class);
//2.创建SimpleTrigger触发器(间隔触发)
//
SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1", "miaoTrigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);
//2.创建CronTrigger触发器(特定触发)
CronTrigger cronTrigger = new CronTrigger("trigger1","miaoTrigger","0 32 11 ? * * ");
//2.1排除
AnnualCalendar annualCalendar = new AnnualCalendar();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH,1);
calendar.set(Calendar.DATE,1);
annualCalendar.setDayExcluded(calendar,true);
//3.创建调度器
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.scheduleJob(job,cronTrigger);
scheduler.addCalendar("exclued",annualCalendar,true,true);
//4.启动调度器
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}

最后

以上就是眼睛大绿茶为你收集整理的Quartz(石英框架)理论基本概念的全部内容,希望文章能够帮你解决Quartz(石英框架)理论基本概念所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部