首页 > 其他分享 >定时任务--Quartz

定时任务--Quartz

时间:2022-10-23 16:57:38浏览次数:65  
标签:表示 10 00 Quartz -- 日期 定时 运行

定时任务--Quartz

Quartz基本介绍

官网:http://www.quartz-scheduler.org/

在SpringBoot中是直接内置Quartz框架的

Quartz是OpenSymphony开源的一个项目,是一个由Java编写的开源作业调度框架。

简单的任务使用:

运行类:需要添加注解@EnableScheduling

@SpringBootApplication
@EnableScheduling
//告诉Spring创建一个task executor,如果我们没有这个标注,所有@Scheduled标注都不会执行
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

任务(定时任务)

@Component
public class ScheduledTask {
    
    @Scheduled(fixedRate = 5000)
    //表示每隔5000ms,Spring scheduling会调用一次该方法,不论该方法的执行时间是多少
    public void reportCurrentTime() throws InterruptedException {
        System.out.println(new Date()));
    }

    @Scheduled(fixedDelay = 5000)
    //表示当方法执行完毕5000ms后,Spring scheduling会再次调用该方法
    public void reportCurrentTimeAfterSleep() throws InterruptedException {
        System.out.println(new Date()));
    }

    @Scheduled(cron = "0 0 1 * * *")
    //提供了一种通用的定时任务表达式,这里表示每隔5秒执行一次,更加详细的信息可以参考cron表达式。
    public void reportCurrentTimeCron() throws InterruptedException {
        System.out.println(new Date()));
    }
}

Cron表达式:

定时任务离不开Cron表达式设置具体执行时间或执行周期,Cron表达式是一个字符串,一般有两种表达:

  1. 秒 分 小时 日 月 星期 年
  2. 秒 分 小时 日 月 星期

其中,年份即为可选的,所以一般表达式为6-7个域,每个域以空格分开。其中的星期除了可以使用英文缩写,也可以用数字1-7数字来表示,注意1表示的是星期日7表示的星期六

*:星号,表示每个字段对应的时间域的每一个,如在日中,就是表示每天。

?:问号,只能在日期和星期字段中使用,表示无意义的值,等价于点位符。

-:减号,表示一个范围,如在分钟中使用5-8,则表示5-8分钟,即5、6、7、8分钟。

,:逗号,表示一个列表值,如在星期中星期一和星期三使用MON,WED,也可以使用数字来表示:1,3

/:斜杠,使用x/y来表示一个等步长序列,x表示起始值,y表示步长值。如在秒字段中使用0/15,表示从0秒开始,每15秒增量,即0秒,15秒,30秒,45秒,这种就可以理解为每15秒执行任务。

L:只能在日期和星期字段中使用,表示Last。在日期中,L表示月份的最后一天,如1月中的31日;在星期中,L表示星期六(或数字7)。

W:只能在日期字段中使用,表示离该日期最近的工作期,不可以跨月。如10W,表示离该月10号最近的工作日,若10号为星期六,则匹配9号星期五;若10号为星期日,则匹配11号星期一;若10号为星期一,则匹配10号星期一。LW组合表示该月的最后一个工作日。

C:只能在日期和星期字段中使用,表示Calendar,即计划所关联的日期,若日期未被关联,则等价于关联所有日期。如日期中使用4C,表示日期4号以后的第一天;星期中使用1C,表示星期日后的第一天。

#:井号只能在星期字段中使用,表示当月某个工作日。如6#2表示当月的第二个星期五(其中,6表示星期五,#3表示当月的第二个).

Cron表达式 说明
0 0 * * * ? 每小时0分0秒运行
0 0 1 * * ? 每天01:00:00运行运行
0 0 1 * * ? * 每天01:00:00运行运行,同上
0 0 1 * * ? 2021 2021年每天01:00:00运行
0 * 10 * * ? 每天10点-11点之间每分钟运行一次,开始于10:00:00,结束于10:59:00
0 0/5 10 * * ? 每天10点-11点之间每5分钟运行一次,开始于10:00:00,结束于10:59:00
0 0/5 10,15 * * ? 每天10点-11点之间每5分钟运行一次,每天15点-16点之间每5分钟运行一次
0 0-10 10 * * ? 每天10:00-10:10之间每分钟运行
0 10 1 ? * MON-FRI 每周一,二,三,四,五的1:10分运行
0 10 1 1 * ? 每月1日的1:10分运行
0 10 1 L * ? 每月最后一天1:10分运行
0 10 1 ? * 6L 每月最后一个星期五1:10分运行
0 10 1 ? * 6#3 每月第3个星期五1:10分运行
  1. Quartz的组成:

    1. 任务:JobDetail
    2. 触发器:Trigger(分为SimpleTrigger和CronTrigger)
    3. 调度器:Scheduler

1.1 任务:JobDetail

JobDetail主要由JobKey(job的名字name和分组group)、JobClass、JobDataMap(任务相关的数据)、JobBuilder组成。常用的是前几个。

示例:

		Map<String,String> jobData = new HashMap<>();
		String jobName = "schedulerJob";
		String jobGroup = "schedulerGroup";
		jobData.put("key00", "value00");
        JobDetail jobDetail = JobBuilder.newJob(SchedulerJob.class)
                .withIdentity(jobName, jobGroup)
                .usingJobData("key01", "value01")
                .usingJobData(jobData)
                .storeDurably()
                .build();

1.2 触发器:Trigger

Trigger规定触发执行Job实现类,主要有SimpleTrigger和CronTrigger两个实现类。Trigger由以下部分组成:

  • TriggerKey(job的名字name和分组group)
  • JobDataMap(Trigger相关的数据,同JobDetail中JobDataMap,存相同key,若value不同,会覆盖前者。)
  • ScheduleBuilder(有CronScheduleBuilder、SimpleScheduleBuilder、CalendarIntervalScheduleBuilder、DailyTimeIntervalScheduleBuilder常用前2种。)

1.3 任务调度器 Scheduler

调度器就是为了读取触发器Trigger从而触发定时任务JobDetail。可以通过SchedulerFactory进行创建调度器,分为StdSchedulerFactory(常用)和DirectSchedulerFactory两种。

  1. StdSchedulerFactory使用一组属性(放在配置文件中)创建和初始化调度器,然后通过getScheduler()方法生成调度程序。
  2. DirectSchedulerFactory不常用,容易硬编码。

标签:表示,10,00,Quartz,--,日期,定时,运行
From: https://www.cnblogs.com/xuzhidong/p/16818859.html

相关文章

  • ajax中的一个beforeSend属性
    ajax中跟success,url等同级别的属性(函数).当ajax向后台发送请求之前,会自动执行本函数;该函数的返回值能够决定ajax是否真正向后台发送请求:如果该函数返回true,则ajax会......
  • pwd
    学习任务学习pwd命令研究pwd实现需要的系统调用(man-k;grep),写出伪代码实现mypwd测试mypwdpwd命令pwd命令用于打印出当前的工作目录。pwd命令有两个选项,-L......
  • 【EF Core】开篇
    概念1、EFCore框架3种模式:   DatabaseFirst:DBFirst方式生成SQLite实体对象ModelFirst:已经被淘汰CodeFirst:推荐默认协定:每一种模式都有一个默认协......
  • HTML标签-文件标签和文本标签
    HTML文件标签文件标签:构成html最基本的标签html:html文档的根标签head:头标签,用于去指定html文档的一些属性,还可以引入一些外部的资源(脑袋)title:标题标签(头部......
  • 读书笔记07-《恶意》东野圭吾
    《恶意》(日文名:あくい)[百度百科https://baike.baidu.com/item/恶意/9896445?fr=aladdin]《恶意》是日本推理小说家东野圭吾老师的作品,是我心目中的佳作之一,其实这不是我......
  • C#-列表
    类似数组,但具有改变长度的功能。声明List<int>vs=newList<int>();List<int>vs1=newList<int>{0,45,454,584,45};//添加:在列表的最右边vs.Add(0);vs.Add(1......
  • ARC141D
    关键点在于\(M\leN\le2M\)的条件。结论:在\(1\sim2M\)中至多选出\(M\)个数使得它们两两不为整除关系。证明:鸽巢原理。考虑把每个数写成\((x,y)\)表示\(A_i=x\ti......
  • SpringBoot(九) - Swagger
    1、依赖<!--swagger核心--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.8.0</version></d......
  • 使用matlab绘制雷达图
    黑色雷达背景,绿色辅助网格线。使用polarplot在matlab雷达图: plt_2D=[];%二维图legend_str_2D={};%二维图fig=figure('Name','Visual2D');pax=polara......
  • 第四周总结
    目录异常处理语法结构异常处理语法结构可迭代对象、迭代器和生成器异常处理语法结构异常处理语法结构基本语法结构try:待监测的代码except错误类型:针对上......