在springboot项目中实现一个定时任务执行的功能

前言

  这篇文章教大家在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(
Spring Boot实现一个定时任务的方法如下: 1. 首先,在你的项目中添加spring-boot-starter-quartz依赖。 2. 创建一个Job类并实现org.quartz.Job接口,该接口只有一个方法execute(JobExecutionContext context) ,在该方法中写定时任务执行的逻辑代码。 3. 创建一个Trigger类,指定定时任务的触发规则,如定时周期等。 4. 创建一个SchedulerFactoryBean类,并将Job和Trigger对象注入到该类中。 5. 在SchedulerFactoryBean类中配置Quartz的相关属性,如线程池大小、任务调度器等。 6. 最后,在Spring Boot应用程序中,通过注解或在类中添加@Bean注解来启动SchedulerFactoryBean。 参考代码: 1. 添加依赖 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2. 编写Job类 ``` public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 执行定时任务的逻辑代码 } } ``` 3. 编写Trigger类 ``` @Bean public Trigger myTrigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(60) // 每隔60秒执行一次 .repeatForever(); return TriggerBuilder.newTrigger() .forJob(myJobDetail()) .withSchedule(scheduleBuilder) .build(); } ``` 4. 配置SchedulerFactoryBean ``` @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean factoryBean = new SchedulerFactoryBean(); factoryBean.setJobDetails(myJobDetail()); factoryBean.setTriggers(myTrigger()); factoryBean.setAutoStartup(true); factoryBean.setOverwriteExistingJobs(true); return factoryBean; } ``` 5. 在Spring Boot应用程序中启动SchedulerFactoryBean ``` @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } @Autowired private SchedulerFactoryBean schedulerFactoryBean; @PostConstruct public void init() { schedulerFactoryBean.start(); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知了蝉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值