package com.malk.schedule; import com.malk.service.dingtalk.DDClient; import com.malk.service.dingtalk.DDClient_Event; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; /** * 定时任务ScheduleTask * - * 1. @EnableScheduling:开启定时任务,当前文件文件全局注解【也可单独成为一个控制的配置文件管控全局】 * 2. @Scheduled:定时执行的方法,通过入参控制 * - 1. @Scheduled(fixedDelay = 5000):单位毫秒,当任务执行完毕后5s后再执行 * - 2. @Scheduled(fixedRate = 3000):单位毫秒,表示每隔3秒,不受执行时间影响 * - 3. cron表达式:cron一共有7位,但是最后一位是年,可以留空,cron中,还有一些特殊的符号 * 3. @component / @Configuration:声明定时任务为组件类。若不声明,定时器无效,因为没有注入 */ /** * @EnableScheduling 条件注入, 根据条件确定当前类是否要装载Bean: 如定时器开发环境不启动 * - * 示例:注意格式 @ConditionalOnExpression(value = "${spel.scheduling}") 或者 @ConditionalOnProperty(name = "spel.scheduling", havingValue = "false") * * * @ConditionalOnExpression,可多个参数,支持与、或关系,默认匹配bool。注意若对应环境未识别到声明会报错 * @ConditionalOnProperty,可多个参数,支持与,若获取值为空识别为false,若有值则将该值与havingValue指定的值进行比较,匹配结果为bool。不支持或 */ @Slf4j @Configuration @EnableScheduling @ConditionalOnProperty(name = {"spel.scheduling"}, havingValue = "false") public class McScheduleTask { @Autowired private DDClient ddClient; @Autowired private DDClient_Event ddClient_event; /** * 钉钉事件回调 3_3 * - * 同步钉钉推送失败记录: 推送失败列表, 获取后记录会被清空 */ // @Scheduled(cron = "0 0/30 7-23 * * ?") public void syncDingTalkFailedList() { try { ddClient_event.syncFailedList(ddClient.getAccessToken()); } catch (Exception e) { // 记录错误信息 e.printStackTrace(); } } }