最近节日
正在加载日历...----
Quartz是java编写的,使用时直接导入依赖即可

是java编写的,使用时直接导入依赖即可
什么是任务调度(计划任务)
所谓任务调度,就是执行某些具体动作的时间计划,也是计划任务
Quartz的调度功能更详细的指定时间,比Timer功能多

Job:任务
Trigger:触发器
调度器来配置,计划什么时间触发什么任务,简单来说就是调度器规定什么时间做什么事情
在这个方法中编写要进行的操作(具体要执行的任务)
我们还需要一个JobDetail的类型的对象,Quartz每次执行job时,会实例化Job对象,去调用execute( )
JobDetail是用来描述Job实现类的静态信息 简单触发可以使用SimpleTrigger实现类,功能类似timer
复杂触发可以使用CronTrigger实现类,内部使用Cron表达式描述各种复杂的时间调度计划 在调度器中保存全部的Quartz保存的任务SpringBoot框架中,添加Quartz依赖后,调度器由SpringBoot管理,我们不需要编写
格式:[秒] [分] [时] [日] [月] [周] [年]
| 序号 | 说明 | 是否必填 | 允许填写的值 | 允许的通配符 |
|---|---|---|---|---|
| 1 | 秒 | 是 | 0-59 | , - * / |
| 2 | 分 | 是 | 0-59 | , - * / |
| 3 | 时 | 是 | 0-23 | , - * / |
| 4 | 日 | 是 | 1-31 | , - * ? / L W |
| 5 | 月 | 是 | 1-12 or JAN-DEC | , - * / |
| 6 | 周 | 是 | 1-7 or SUN-SAT | , - * ? / L # |
| 7 | 年 | 否 | empty 或1970-2099 | , - * / |
*表示任何值,如果在时的位置上编写,表示每小时都会触发
,表示分隔符,如果在分的位置上写成20,40 ,表示在20分钟和40分钟都会触发,触发两次
-表示一个区间,在秒位置上写5-10,表示在5,6,7,8,9,10都会触发
/表示递增触发,在秒位置上写5/10,表示5秒开始每隔10秒触发一次
?表示不确定值,因为我们在定日期时,一般确定日期就不确定是周几,相反确定是周几就不确定日期
L表示Last最后的意思,我们设置当月的最后一天,就在日字段上用L表示
周字段使用L,表示最后一周,一般会和1-7的数组组合
比如:6L表示本月最后一周的周五
W是work表示最近的工作日(单纯的周一到周五),如果日字段写10W表示每个月的10日最近的工作日触发,如果10日是周六,则9日就触发,如果10日是周日,则11号触发
LW通常一起使用,表示本月的最后一个工作日
#表示第几个,只能使用在周字段上6#3,表示每月的第三个周五,如果#后数字写大了,是一个不存在的日期,那就不运行了
适合设计在母亲节或父亲节这样的日期运行
比如现在2.14日情人节在0时触发活动任务:“0 0 0 14 2 ?”
网络上可用的Cron表达式生成器有很多,推荐一个:http://cron.ciding.cc/
双十一的0时触发,表达式:0 0 0 11 11 ?
csmall-stock-webapi测试Quartz
<!--引入Quartz依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>创建Job的实现类
public class QuartzJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //具体要执行的任务--输出当前时间 System.out.println("=============="+LocalDateTime.now()+"=============="); }}创建配置类
//当前类是配置Spring容器中的调度器Scheduler@Configurationpublic class QuartzConfig { //创建一个JobDetail对象封装Job的实现类,需要交给Spring容器管理 @Bean public JobDetail showTime(){ System.out.println("showTime方法运行"); return JobBuilder.newJob(QuartzJob.class) //给这个JobDetail起个名字 .withIdentity("datetime") //即使没有触发器绑定这个JobDetail,也不会删除 .storeDurably() .build(); } //创建触发器对象,可以设置job什么时候运行,也需要保存到Spring容器 @Bean public Trigger showTimeTrigger(){ System.out.println("showTimeTrigger方法运行"); //cron表达式 CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("5,10 * 20 13 2 ?"); return TriggerBuilder.newTrigger() //绑定要运行的JobDetail对象 .forJob(showTime()) //当前触发器的名称 .withIdentity("dateTrigger") //绑定cron表达式 .withSchedule(cronScheduleBuilder) .build(); }}测试
Nacos\Seata需要启动
其他服务和软件都可以关闭
然后启动csmall-stock模块
观察控制台输出
