Springboot实现定时任务
【摘要】 一般来说java的SpringBoot创建定时任务主要有三种实现方式:一、基于注解(@Scheduled):基于注解@Scheduled默认基于为单线程,开启多个任务时候任务的执行时机会受上一个任务执行时间的影响,二、基于接口SchedulingConfigurer来实现从数据库获取指定时间来动态执行定时任务计划三、基于注解设定多线程定时任务本文主要讲解基于Springboot的SaticS...
一般来说java的SpringBoot创建定时任务
主要有三种实现方式:
一、基于注解(@Scheduled):基于注解@Scheduled默认基于为单线程,开启多个任务时候任务的执行时机会受上一个任务执行时间的影响,
二、基于接口SchedulingConfigurer来实现从数据库获取指定时间来动态执行定时任务计划
三、基于注解设定多线程定时任务
本文主要讲解基于Springboot的SaticScheduleTask来执行定时任务操作。
常用的Cron表达式参数如下大家应该都不陌生:
- 秒(0~59) 例如0/5表示每5秒
- 分(0~59)
- 时(0~23)
- 日(0~31)的某天,需计算
- 月(0~11)
使用@Scheduled 注解很方便能够很方便的执行定时和延时任务。springboot的定时任务默认是单线程
package com.yt.common.util;
import com.yt.exam.biz.ExamPlanBiz;
import com.yt.exam.biz.ExamRecordBiz;
import com.yt.exam.ctrl.vo.ExamRecordVo;
import com.yt.exam.entity.ExamPlan;
import com.yt.exam.entity.ExamRecord;
import com.yt.exam.enums.ExamStatusEnum;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List;
@Configuration //1.主要用于标记配置类,兼备Component的效果。
public class SaticScheduleTask implements ApplicationContextAware {
@Autowired
@SuppressWarnings("all")
private ExamPlanBiz examPlanBiz;
@Autowired
@SuppressWarnings("all")
private ExamRecordBiz examRecordBiz;
//3.添加定时任务每分钟执行
@Scheduled(cron = "0 */1 * * * ?")
private void configureTasks() {
//从数据库获取数据
List<ExamPlan> examPlans = examPlanBiz.loadAll();
long epochSecond = LocalDateTime.now().atZone(ZoneId.of("Asia/Shanghai")).toInstant().getEpochSecond()*1000;
for (int i = 0; i <examPlans.size() ; i++) {
ExamPlan examPlan = examPlans.get(i);
if(epochSecond >= examPlan.getEndTime().getTime()){
List<ExamRecordVo> examRecordVos=examRecordBiz.getExamRecordList(examPlan.getId());
for (int j = 0; j <examRecordVos.size() ; j++) {
//修改用户考试状态
ExamRecordVo recordVo = examRecordVos.get(j);
if(recordVo.getStatus()== ExamStatusEnum.WAIT.getCode()){//待考
ExamRecord examRecord =new ExamRecord();
examRecord.setId(recordVo.getRecordId());
examRecord.setStatus(ExamStatusEnum.ABSENT.getCode());//缺考
examRecordBiz.update(examRecord);
}
}
}
}
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
}
}
这里@Configuration配置类交给spring容器管理!项目启动就能执行,加载定时任务执行方法批量执行业务定时操作。
大家点赞、收藏、关注、评论啦 、打卡 文章 更新 268/ 365天
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)