大家好,欢迎来到IT知识分享网。
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