填第一个坑,自动发送考试提醒。上次的版本已经可以后台手动发送考试提醒(手动发送微信订阅消息),这次加上一个定时任务,让程序自动发送考试提醒。
我想实现的是:距离考试<=60分钟时,微信自动发送考试提醒。要实现这个,就要用到springboot的定时任务了。
- 在启动类上开启定时任务
@EnableScheduling //开启定时任务
- 使用静态定时任务即可,不需要使用动态定时任务。因为这个提醒时间是固定的,考试前一小时。
@Configuration //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务
@AllArgsConstructor
public class cronConfig {
private final ExamPaperService examPaperService;
private final SendWxMessageController sendWxMessageController;
//3.添加定时任务
@Scheduled(cron = "0 0/30 * * * ?")
//或直接指定时间间隔,例如:5秒
//0 0/30 * * * ? 30分钟执行一次
//0 0/5 * * * ? 5分钟一次
//@Scheduled(fixedRate=5000)
private void configureTasks() throws ParseException {
//过滤试卷,只有考试时间大于现在时间的试卷才查询出来
PaperFilter timeLimitPaperFilter=new PaperFilter();
//限制为时段试卷才发送提醒
timeLimitPaperFilter.setExamPaperType(4);
timeLimitPaperFilter.setDateTime(new Date());
List limitPaper = examPaperService.limitPaper(timeLimitPaperFilter);
for (PaperInfo paperInfo:limitPaper
) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date a=sdf.parse(sdf.format(paperInfo.getLimitStartTime()));
Date b=sdf.parse(sdf.format(new Date()));
//离考试还有1小时,发送微信提醒
if(a.getTime()-b.getTime()<=3600000)
//发送微信提醒
sendWxMessageController.pushOneUser(paperInfo.getId());
}
//System.err.println("执行静态定时任务时间: " + LocalDateTime.now()+"---"+limitPaper.size());
}
}
最终效果如下(测试没有创建测试数据,测试时把筛查条件改成>=3600):
消息发送成功
控制台日志打印成功
数据库查询,也只有2个试卷符合
- 最后,顺便改了下分公司结构