注意:
本文应用了Quartz入门中的入门案例作为基础
1.Trigger触发器的介绍
上图即是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(); } }
注意:
- 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.表达式的取值
在线生成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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复