一分钟看懂Springboot整合Quartz实现任务调度

一分钟看懂Springboot整合Quartz实现任务调度1、pom中导入quartz的依赖<dependency>     <groupId>org.springframe

大家好,欢迎来到IT知识分享网。

一分钟看懂Springboot整合Quartz实现任务调度

1、pom中导入quartz的依赖

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-quartz</artifactId>     <version>2.1.17.RELEASE</version>     </dependency>

版本号和你导入的boot的版本一直即可。

2、编写Quartz的执行类

编写一个类继承QuartzJobBean,其关键对象分为三个:

1、调度工作类:org.springframework.scheduling.quartz.JobDetailBean,该对象通过jobClass属性指定调度工作类;

2、调度触发器:org.springframework.scheduling.quartz.CronTriggerBean,该对象通过jobDetail属性指定工作类,通过cronExpression属性指定调度频率;

3、调度工厂类:org.springframework.scheduling.quartz.SchedulerFactoryBean,该对象通过triggers属性指定单个或多个触发器。

以下为我自己编写的取消订单的定时器类:

public class CancelOrderJob extends QuartzJobBean implements Serializable { private static Logger logger = LoggerFactory.getLogger(CancelOrderJob.class); private IUserOrderService userOrderService; @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { Date date=new Date(); logger.info("取消未支付订单定时器开始执行了,开始时间:"+date.getTime()); try { userOrderService = SpringUtils.getBean(IUserOrderService.class); userOrderService.cancelOrderJob(); logger.info("取消未支付订单的定时器执行结束了,结束时间:"+new Date()); } catch (BeansException e) { e.printStackTrace(); } } }

自定义CancelOrderJob类实现了QuartzJobBean 然后重新其executeInternal方法, 使用SpringUtils工具类来获取你要操作的接口类对象,然后调用方法即可。

3、编写QuartzConfig配置类

主要配置以上说的三个对象,

@Configuration public class QuartzConfig { }

一定要记得在你的配置类上添加@Configuration注解,否则无法生效。

@Bean public JobDetail cancelOrderJobDetail(){ return JobBuilder.newJob(CancelOrderJob.class)//PrintTimeJob我们的业务类 .withIdentity("cancelOrderJob")//可以给该JobDetail起一个id .storeDurably()//即使没有Trigger关联时,也不需要删除该JobDetail .build(); } @Bean public Trigger cancelOrderJobTrigger() { CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 */1 * * * ?"); return TriggerBuilder.newTrigger() .forJob(cancelOrderJobDetail())//关联上述的JobDetail .withIdentity("cancelOrderTrigger")//给Trigger起个名字 .withSchedule(cronScheduleBuilder) .build(); }

cancelOrderJobDetail 创建具体的工作任务对象。

cancelOrderJobTrigger 创建该工作的触发器并绑定工作任务对象和触发的时间cron表达式。

4、导入数据库表

因为需要和数据库一起使用在配置好这些后一定要记得数据库导入quartz对应的11张表。

5、cron表达式

Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

Seconds Minutes Hours DayofMonth Month DayofWeek Year
Seconds Minutes Hours DayofMonth Month DayofWeek

Seconds:可出现”,- * /”四个字符,有效范围为0-59的整数
Minutes:可出现”, – * /”四个字符,有效范围为0-59的整数
Hours:可出现”, – * /”四个字符,有效范围为0-23的整数
DayofMonth:可出现”, – * / ? L W C”八个字符,有效范围为0-31的整数
Month:可出现”, – * /”四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek:可出现”, – * / ? L C #”四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year:可出现”, – * /”四个字符,有效范围为1970-2099年

6、Cron表达式范例:

每隔5秒执行一次:*/5 * * * * ?

每隔1分钟执行一次:0 */1 * * * ?

每天23点执行一次:0 0 23 * * ?

每天凌晨1点执行一次:0 0 1 * * ?

每月1号凌晨1点执行一次:0 0 1 1 * ?

每月最后一天23点执行一次:0 0 23 L * ?

每周星期天凌晨1点实行一次:0 0 1 ? * L

在26分、29分、33分执行一次:0 26,29,33 * * * ?

每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/57970.html

(0)
上一篇 2024-07-08 17:45
下一篇 2024-07-08 20:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信