今天在构思redis做缓存的时候,想到缓存中的数据需要更新,如果系统的流量较大的话,更新缓存的时候可能会发生缓存雪崩击穿的问题,所以此时就需要一个定时任务了,当后台修改过某些数据的时候,不是立即更新缓存,而是告诉用户“您的修改将在明天凌晨4点钟生效”,其实也就是明天凌晨4点钟更新缓存,那么如何明天凌晨4点钟更新缓存呢,也就是这个定时任务怎么做呢。废话不多说了,上代码
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
@RestController
@RequestMapping("test")
public class TestTimer {
@RequestMapping("timer")
public String testTimer(String name){
// 获取Calendar对象,用于自定时时间
Calendar c = Calendar.getInstance();
// 绑定当前时间的年月日,年就是本年,月是本月,日是下一日(如果是-1的话,就是昨天喽)
c.add(Calendar.YEAR,0);
c.add(Calendar.MONTH,0);
c.add(Calendar.DAY_OF_MONTH,1);
// 设置当前时间的时分秒,时就是凌晨4点,分是0分,秒是0秒
c.set(Calendar.HOUR_OF_DAY,4); //HOUR_OF_DAY是24小时制,HOUR是12小时制
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
// 得到自定义的时间,就是明天凌晨4点喽
Date date = c.getTime();
// 获取一个Timer对象,用于执行定时任务
Timer timer = new Timer();
// 按照刚才指定好的时间,执行定时任务,重点到喽
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(name+"的定时任务开始执行!");
}
},date);
return name+" ready? gogogo!";
}
}
注意: 在此我的demo是写成了一个接口,在工作中,定时任务当然是发生在业务层中的,那么就把接口中的这一坨代码封装到业务层中写一个方法就可以喽