在开发小程序客服功能的时候 , 需要定时去刷新临时素材media_id , 记录定时器的搭建以及开发
快速入门
1 | //引入maven坐标(版本太低,会出现某些方法不兼容导致报错) |
启动之后 , 可以看到任务大约每隔10s就会被执行一次
1 | 18:42:30.116 [MyScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers |
项目上的搭建
1. 拓展适配任务工厂类
因为Job对象的实例化过程是在Quartz中进行的,Service是在Spring容器当中的,那么如何将他们关联到一起呢 ? Quartz提供了JobFactory接口,让我们可以自定义实现创建Job的逻辑。
1 | public interface JobFactory { |
通过实现JobFactory 接口,在实例化Job以后,在通过ApplicationContext 将Job所需要的属性注入即可在Spring与Quartz集成时 用到的org.springframework.scheduling.quartz.SchedulerFactoryBean这个类。源码如下,我们只看最关键的地方。
1 | // Get Scheduler instance from SchedulerFactory. |
我们不指定jobFactory,那么Spring就使用AdaptableJobFactory。这个类的实现
1 | package org.springframework.scheduling.quartz; |
这里创建了一个Job实例,那就在这里去给Job的属性进行注入就可以了,写一个类继承它,然后复写这个方法进行对Job的注入。
1 | package com.mallparking.common.factory; |
接下来把自定义注入继承的AdaptableJobFactory配置到Spring当中去 , 然后在去修改SchedulerFactoryBean里面的jobFactory(见3.2.3)
2. 配置spring-boot下定时器的配置类
1 | package com.mallparking.config; |
3. 实践开发
3.1 注解cron表达式开发
需求是更新数据库中微信临时素材media_id
1 |
|
3.2 simpleSchedule/cronSchdule开发
需求是设定某个时间,然后将信息发送出去
在快速入门的时候 , 有创建一个核心任务调度器Schduler , 为此我们需要创建一个任务的启动或关闭或删除的类,简称任务处理调度类
3.2.1. 声明Schedule ,注入scheduler对quartz Job进行管理
1 |
|
3.2.2. 创建任务类继承Job
1 |
|
3.2.3. spring-boot启动的时候,需要将任务加载进定时器
1 | /** |
3.2.4. 设置spring-boot启动监听
任务启动的时候,将多个任务一起执行
1 | /** |