我是靠谱客的博主 明亮歌曲,这篇文章主要介绍Quartz - Trigger触发器的介绍,现在分享给大家,希望可以做个参考。

注意:

本文应用了Quartz入门中的入门案例作为基础


1.Trigger触发器的介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ixnfd3t9-1626662909305)(imagesimage-20210713152208189.png)]

上图即是Quartz的触发器类型,常用的为SimpleTriggerImpl,CronTriggerImpl

1.SimpleTriggerImpl的使用

设置触发的开始时间和结束时间及执行计划

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/** * @Author ScholarTang * @Date 2021/7/13 10:45 * @Desc 任务类 */ @Slf4j @PersistJobDataAfterExecution public class HelloJobTrigger implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { Trigger trigger = jobExecutionContext.getTrigger(); JobKey jobKey = trigger.getJobKey(); log.info("触发器名称:" + jobKey.getName() + " | 触发器组名:" + jobKey.getGroup() ); log.info("触发器开始执行时间:" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(trigger.getStartTime()) + " | 触发器结束执行时间:" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(trigger.getEndTime())); log.info(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + " | 任务被执行了"); } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/** * @Author ScholarTang * @Date 2021/7/13 10:53 * @Desc 调度器 */ @Slf4j public class HelloSchedulerDemo { public static void main(String[] args) throws SchedulerException { //开始时间 & 结束时间 Date startTime = new Date(); Date endTime = new Date(); endTime.setTime(endTime.getTime() + 20000); //从调度工厂中获取调度器实例 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //通过JobBuilder构建一个任务实例 JobDetail jobDetail = JobBuilder.newJob(HelloJobTrigger.class) //设置任务的唯一实例名称和任务组名称组名 .withIdentity("job1", "group1") //构建实例 .build(); //通过TriggerBuilder构建触发器实例 SimpleTrigger trigger = TriggerBuilder.newTrigger() //设置触发器唯一实例名称和触发器的组名 .withIdentity("trigger1", "group1") //执行计划,每五秒执行一次 .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5) .withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY) //重复执行次数 ) //开始执行时间 .startAt(startTime) //结束执行时间 .endAt(endTime) //构建实例 .build(); //调度器绑定任务实例和触发器 scheduler.scheduleJob(jobDetail,trigger); //开启定时任务 scheduler.start(); } }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xtU3yUq9-1626662909308)(imagesimage-20210713153505134.png)]

注意:

  • SimpleTrigger的属性有:开始时间,结束时间,重复次数和重复时间间隔
  • 重复次数的值可以为0、正数、或常量。例如:SimpleTrigger.REPEAT_INDEFINITELY
  • 重复的时间间隔属性值必须为大于0或者长整型的整数,以毫秒为为时间单位,当重复的时间间隔为0时,意味着与Trigger同时触发执行
  • 如果有指定结束时间属性值,则结束时间属性优先于重复次数属性,这样的好处在于;当我们需要创建一个每间隔10秒触发一次直到指定的结束时间的Trigger,而无需去计算从开始到结束的所重复执行次数。我们只需要简单的执行结束时间和使用REPEAT_INDEFINITELY作为重复次数的属性值即可

2.CronTrigger触发器的介绍

2.1.CronTrigger简介

如果需要像日历那样按日程来触发任务,而不是像SimpleTrigger那样每隔特定的间隔时间触发,CronTriggers通常比SimpleTrigger更有用,因为它是基于日历的任务调度器

使用CronTrigger,可以指定诸如每个周五的12点,或者每天的9点等等…这样的日程来安排触发。甚至还可以像SimpleTrigger一样,CornTrigger也有一个startTime以指定日程从什么时候开始,也有一个(可选的)endTime以指定任何日期不再继续

2.2.corn表达式

corn表达式相信大家并不陌生,corn表达式被用来配置CronTrigger实例。corn表达式是一个由7个表达式组成的字符串。每一个子表达式描述了一个单独的日程细节。这些子表达式用空格分隔,分别表示:seconds秒、minutes分钟、hours小时、day-of-month月中的天、moth月,year年

2.3.表达式的取值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cgktBlFL-1626662909309)(/Users/jiangnan/Library/Application Support/typora-user-images/image-20210719095751206.png)]

在线生成corn表达式:https://cron.qqe2.com/

2.3.演示案例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
/** * @Author ScholarTang * @Date 2021/7/13 16:28 * @Desc 任务类 */ @Slf4j public class HelloJonCornTrigger implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { log.info(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + " | 任务被执行了"); } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/** * @Author ScholarTang * @Date 2021/7/13 10:53 * @Desc 调度器 */ @Slf4j public class HelloSchedulerDemo { public static void main(String[] args) throws SchedulerException { //从调度工厂中获取调度器实例 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //通过JobBuilder构建一个任务实例 JobDetail jobDetail = JobBuilder.newJob(HelloJonCornTrigger.class) //设置任务的唯一实例名称和任务组名称组名 .withIdentity("job1", "group1") //构建实例 .build(); //通过TriggerBuilder构建触发器实例 Trigger trigger = TriggerBuilder.newTrigger() //设置触发器唯一实例名称和触发器的组名 .withIdentity("trigger1", "group1") //立刻执行 .startNow() //每年的每月的每个星期得每天的每小时的每秒都会执行 .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?")) //构建实例 .build(); //调度器绑定任务实例和触发器 scheduler.scheduleJob(jobDetail,trigger); //开启定时任务 scheduler.start(); } }

最后

以上就是明亮歌曲最近收集整理的关于Quartz - Trigger触发器的介绍的全部内容,更多相关Quartz内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部