目录
定时器任务使用有一阵子,抽空看源码学习下
实现类
实际上还是ThreadPoolTaskScheduler的方法,只是封装了一层更适合项目使用
@Component
public class Schedule {
@Autowired
private TaskScheduler taskScheduler;
/**
* 每x毫秒钟执行(如果时间已过立即执行一次)
* @param task 任务
* @param startSeconds 执行周期(毫秒)
*/
public void addEveryMillisecond(Runnable task, long startSeconds) {
taskScheduler.scheduleAtFixedRate(task, startSeconds);
}
/**
* 每x秒钟执行(如果时间已过立即执行一次)
* @param task 任务
* @param startSeconds 执行周期(秒)
*/
public void addEverySecond(Runnable task, int startSeconds) {
int millSeconds = startSeconds * TimeConstant.ONE_SECOND_MILLISECOND;
Date startDate = DateUtils.getDelayDate(millSeconds, TimeUnit.MILLISECONDS);
taskScheduler.scheduleAtFixedRate(task, startDate, millSeconds);
}
/**
* 每x秒钟执行(如果时间已过立即执行一次)
* @param task 任务
* @param startSeconds 延时启动(秒)
* @param intervalSeconds 执行周期(秒)
*/
public void addEverySecond(Runnable task, int startSeconds, int intervalSeconds) {
int millSeconds = intervalSeconds * TimeConstant.ONE_SECOND_MILLISECOND;
Date startDate = DateUtils.getDelayDate(startSeconds * TimeConstant.ONE_SECOND_MILLISECOND, TimeUnit.MILLISECONDS);
taskScheduler.scheduleAtFixedRate(task, startDate, millSeconds);
}
/**
* 每x分钟执行 (如果时间已过立即执行一次)
* @param task runnable对象
* @param startMinute 执行周期时间(分钟)
*/
public void addEveryMinute(Runnable task, int startMinute) {
int millSeconds = startMinute * 60 * TimeConstant.ONE_SECOND_MILLISECOND;
Date startDate = DateUtils.getDelayDate(millSeconds, TimeUnit.MILLISECONDS);
taskScheduler.scheduleAtFixedRate(task, startDate, millSeconds);
}
/**
* 每x分钟执行(整数倍时间)
* @param task runnable对象
* @param startMinute 执行周期时间(分钟)
*/
public void addEveryMinuteZeroStart(Runnable task, int startMinute) {
int millSeconds = startMinute * 60 * TimeConstant.ONE_SECOND_MILLISECOND;
Date startDate = DateUtils.getDelayMinuteDate(startMinute);
taskScheduler.scheduleAtFixedRate(task, startDate, mill