Spring TaskScheduler实现定时任务分析

本文介绍了Spring TaskScheduler的实现,包括其实现类和使用方法。详细讲解了ThreadPoolTaskScheduler,以及ScheduledExecutorService中ScheduledThreadPoolExecutor如何实现重复任务,并通过delayedExecute方法设置执行周期任务。
摘要由CSDN通过智能技术生成


定时器任务使用有一阵子,抽空看源码学习下

实现类

实际上还是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>