定时执行任务
用于定时执行某个模块
1:创建定时任务类,使用cron表达式调整定时时间
import com.atguigu.staservice.service.StatisticsDailyService;
import com.atguigu.staservice.utils.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class ScheduledTask {
//这个是所需修改的数据表对应的service,用以控制其
@Autowired
private StatisticsDailyService staService;
// 0/5 * * * * ?表示每隔5秒执行一次这个方法
@Scheduled(cron = "0/5 * * * * ?")
public void task1() {
System.out.println("**************task1执行了..");
}
//在每天凌晨1点,把前一天数据进行数据查询添加
//给serviceImpl中传入一个day参数,并让其每天凌晨一点执行
//DateUtil.formatDate(DateUtil.addDays(new Date(), -1))是获取到前一天的日期
//staService.registerCount是serviceimpl中的方法
@Scheduled(cron = "0 0 1 * * ?")
public void task2() {
staService.registerCount(DateUtil.formatDate(DateUtil.addDays(new Date(), -1)));
}
}
serviceimpl中需要使用这个的方法
这里面并不用给出时间,时间由创建定时那块获取到昨天的时间传进去,让凌晨一点执行
//统计某一天注册人数,生成统计数据
@Override
public void registerCount(String day) {
//添加记录之前删除表相同日期的数据
QueryWrapper<Daily> wrapper=new QueryWrapper<>();
wrapper.eq("date_calculated",day);
baseMapper.delete(wrapper);
//远程调用,查询出今日注册的人数
R r = ucenterClient.countRegister(day);
Integer integer=(Integer) r.getData().get("countRegister");
//将获取到的数据添加到数据分析表
//把获取数据添加数据库,统计分析表里面
Daily sta = new Daily();
sta.setRegisterNum(integer); //注册人数
sta.setDateCalculated(day);//统计日期
sta.setVideoViewNum(RandomUtils.nextInt(100,200));
sta.setLoginNum(RandomUtils.nextInt(100,200));
sta.setCourseNum(RandomUtils.nextInt(100,200));
baseMapper.insert(sta);
}
2:在启动类上添加注解
@EnableScheduling //定时执行
public class StaApplication {
3:在线生成cron表达式
http://cron.qqe2.com/
4:创建Util获取时间
两个方法分别是:获取到当前日期和 amount 后天的日期,amount可以为负数
public class DateUtil {
private static final String dateFormat = "yyyy-MM-dd";
/**
* 格式化日期
*
* @param date
* @return
*/
public static String formatDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
return sdf.format(date);
}
/**
* 在日期date上增加amount天 。
*
* @param date 处理的日期,非null
* @param amount 要加的天数,可能为负数
*/
public static Date addDays(Date date, int amount) {
Calendar now =Calendar.getInstance();
now.setTime(date);
now.set(Calendar.DATE,now.get(Calendar.DATE)+amount);
return now.getTime();
}
public static void main(String[] args) {
System.out.println(DateUtil.formatDate(new Date()));
System.out.println(DateUtil.formatDate(DateUtil.addDays(new Date(), -1)));
}
}