前言
这篇文章教大家在springboot项目中实现一个定时任务执行的功能,并且该定时任务要具备服务重启后也能执行的能力,本文会详细分析思路,并提供完整实现代码。
思路
定时任务线程我们使用TimerTask实现。实现思路是写一个接口接收客户端传过来的任务执行时间等参数,然后接口使用TimerTask根据接收到的执行时间参数创建定时任务,并持久化该次任务的任务ID以及执行时间,然后用CommandLineRunner写一个服务启动时执行的任务线程去查询还未执行的定时任务,并使用TimerTask将任务线程重新生成,这样就可以实现服务重启后原定的定时任务也能到点执行。
代码实现
待执行定时任务实体类
import lombok.Data;
@Data
public class CampaignRecordEntity {
private Long id;
private String pushTime;
private Long campaignId;
private String type;
private String proxy;
}
接收执行时间参数并持久化待执行任务
// todo 下面这里要记录本次任务的参数内容,并为本次任务请求生成一个任务ID 这里假设任务ID 001
String pushTime = "2024-09-29 18:00:00";// 参数传入的任务执行时刻
String taskId = "001";
Timer timer = new Timer(uuid);
TimerTask task = new TimerTask() {
@Override
public void run(