会员网站免费建设,vs2012建设网站,自适应网站做百度推广,网页设计的费用文章目录 在Spring Boot中实现定时任务#xff0c;主要有以下几种方式#xff1a;1. 使用Scheduled注解2. 使用Quartz调度器使用Quartz调度器(更好的做法)3. 使用TaskExecutor和ScheduledExecutorService4.总结 在Spring Boot中实现定时任务#xff0c;主要有以下几种方式主要有以下几种方式1. 使用Scheduled注解2. 使用Quartz调度器使用Quartz调度器(更好的做法)3. 使用TaskExecutor和ScheduledExecutorService4.总结 在Spring Boot中实现定时任务主要有以下几种方式
1. 使用Scheduled注解
这是Spring Boot中最为简便的一种方式只需在方法上添加Scheduled注解并指定任务的执行计划如Cron表达式或固定延迟/间隔。此外还需要在Spring Boot的主类或配置类上添加EnableScheduling注解来启用定时任务支持。
import com.fs.service.UserService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import javax.annotation.Resource;/*** author: jpeng* date: 2024/9/11 11:00* description: Task定时任务*/
Component
public class MyTask {Resourceprivate UserService userService;//定义需要执行的任务每隔多少时间执行一次Scheduled(cron */2 * * * * ?)public void taskone(){System.out.println(task info...);//例子//实际中我们可以调用service层的方法进行操作}
}
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;SpringBootApplication
MapperScan(com.fs.mapper)
//开启task定时任务功能
EnableScheduling
public class MybatisPlusApplication {public static void main(String[] args) {SpringApplication.run(MybatisPlusApplication.class, args);}}2. 使用Quartz调度器
Quartz是一个功能丰富的开源作业调度库它提供了比Spring的Scheduled注解更为复杂的调度选项如作业持久化、集群支持和事务性作业。
在Spring Boot中集成Quartz你需要添加Quartz的依赖并配置JobDetail、Trigger和Scheduler bean。
!-- 在pom.xml中添加Quartz依赖 --
dependency groupIdorg.quartz-scheduler/groupId artifactIdquartz/artifactId version你的Quartz版本/version
/dependency然后定义作业类、配置Quartz调度器并通过Java配置或XML配置来注册JobDetail和Trigger。
使用Quartz调度器(更好的做法)
更好的做法定义作业类只定义JobDetail和Trigger的Bean 在这种的情况下我们只是定义了JobDetail和Trigger的Bean并且没有显式地创建和启动Scheduler那么这通常是可以的并且通常是更好的做法特别是当我们使用Spring Boot的spring-boot-starter-quartz时。
spring-boot-starter-quartz会自动为您配置并启动Scheduler它会查找您定义的JobDetail和Trigger的Bean并将它们注册到Scheduler中。这样您就不需要自己手动管理Scheduler的生命周期了。
!--quartz定时任务--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-quartz/artifactId/dependencyimport org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;/*** author: jpeng* date: 2024/9/11 10:31* description: spring管理job* 1、定义类继承QuartzJobBean* 2、重写executeInternal来实现定时任务功能* 3、通过配置类来执行job触发器和调度器管理*/
public class MyQuarzJob extends QuartzJobBean {Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println(quartz task run...);}
}import com.fs.job.MyQuarzJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** author: jpeng* date: 2024/9/11 10:33* description: Quartz配置类*/
Configuration
public class QuartzConfig {Beanpublic JobDetail detail(){//绑定具体的工具Jobreturn JobBuilder.newJob(MyQuarzJob.class).storeDurably().build();}Beanpublic Trigger jobTrigger(){//指定了调度的规则CronScheduleBuilder cronScheduleBuilder CronScheduleBuilder.cronSchedule(*/2 * * * * ? *);//通过触发器绑定工作明细和指定触发器调度规则return TriggerBuilder.newTrigger().forJob(detail()).withSchedule(cronScheduleBuilder).build();}
}
3. 使用TaskExecutor和ScheduledExecutorService
虽然这两种方式并不直接等同于定时任务调度但它们可以用于在Spring Boot应用中执行异步任务。TaskExecutor是Spring框架中用于执行异步任务的接口而ScheduledExecutorService是Java并发包中提供的一个接口用于在给定延迟后运行命令或者定期地执行命令。
Autowired
private TaskExecutor taskExecutor; public void executeAsyncTask() { taskExecutor.execute(() - { // 执行异步任务 });
} // 或者使用Java的ScheduledExecutorService
Bean
public ScheduledExecutorService scheduledExecutorService() { return Executors.newScheduledThreadPool(5);
} Autowired
private ScheduledExecutorService executorService; public void scheduleTask() { executorService.schedule(() - { // 执行定时任务 }, 1, TimeUnit.SECONDS);
}注意这些方式通常用于执行异步任务而不是严格的定时任务调度。对于定时任务调度推荐使用Scheduled注解或Quartz。
4.总结
在Spring Boot中推荐使用Scheduled注解来实现简单的定时任务调度需求因为它配置简单且易于使用。对于需要更复杂调度功能的场景可以考虑使用Quartz。而TaskExecutor和ScheduledExecutorService则更适合于执行异步任务。