阿里云开发者社区

电脑版
提示:原网页已由神马搜索转码, 内容由developer.aliyun.com提供.

Springboot项目中定时任务的四种实现方式

2024-03-2056
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:Springboot项目中定时任务的四种实现方式

在开发现代应用时,定时任务是一个非常常见的需求。无论是数据清理、数据同步、报表生成还是其他周期性任务,都可以通过定时任务来实现。Spring框架为我们提供了多种实现定时任务的方式,让我们可以根据项目的需求和特点来选择合适的方式。

1. 使用@Scheduled注解

Spring的@Scheduled注解是一种非常简单和便捷的实现定时任务的方式。通过在方法上添加@Scheduled注解,我们可以指定方法在特定的时间间隔或固定的时间点执行。

1.1 时间间隔执行

@Componentpublic class ScheduledTasks {    @Scheduled(fixedRate = 5000) // 每隔5秒执行一次    public void task1() {        // 定时任务逻辑    }    @Scheduled(fixedDelay = 10000) // 上次执行结束后延迟10秒再执行    public void task2() {        // 定时任务逻辑    }    @Scheduled(initialDelay = 5000, fixedRate = 10000) // 延迟5秒后,每隔10秒执行一次    public void task3() {        // 定时任务逻辑    }}

1.2 固定时间点执行

@Componentpublic class ScheduledTasks {    @Scheduled(cron = "0 0 0 * * ?") // 每天零点执行    public void task4() {        // 定时任务逻辑    }    @Scheduled(cron = "0 0 12 * * MON-FRI") // 每个工作日中午12点执行    public void task5() {        // 定时任务逻辑    }}

2. 使用@EnableScheduling注解启用定时任务

除了在定时任务类中直接使用@Scheduled注解外,我们还可以通过在主类上添加@EnableScheduling注解来启用定时任务功能。

@SpringBootApplication@EnableSchedulingpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

然后在定时任务类中使用@Scheduled注解定义定时任务方法,与之前的方式相同。

3. 实现SchedulingConfigurer接口

如果我们需要更灵活地配置定时任务,比如动态地改变定时任务的执行频率或者添加多个定时任务,可以通过实现SchedulingConfigurer接口来实现。

@Configuration@EnableSchedulingpublic class ScheduledConfig implements SchedulingConfigurer {    @Override    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {        taskRegistrar.addTriggerTask(            () -> {                // 定时任务逻辑            },            triggerContext -> {                CronTrigger cronTrigger = new CronTrigger("0 0 0 * * ?"); // 每天零点执行                return cronTrigger.nextExecutionTime(triggerContext);            }        );    }}

4. 使用Quartz框架

如果需要更强大和灵活的定时任务功能,比如支持集群部署、任务调度、错过任务处理等,可以选择集成Quartz框架。

4.1 配置QuartzScheduler

首先需要配置QuartzScheduler,在Spring Boot中可以通过配置文件或者Java代码来配置。

@Configurationpublic class QuartzConfig {    @Bean    public SchedulerFactoryBean schedulerFactoryBean() {        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();        // 其他配置        return schedulerFactoryBean;    }}

4.2 定义Job类和Trigger类

@Componentpublic class MyJob implements Job {    @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        // 定时任务逻辑    }}@Configurationpublic class QuartzConfig {    @Bean    public JobDetail myJobDetail() {        return JobBuilder.newJob(MyJob.class)            .withIdentity("myJob")            .storeDurably()            .build();    }    @Bean    public Trigger myTrigger() {        return TriggerBuilder.newTrigger()            .forJob(myJobDetail())            .withIdentity("myTrigger")            .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")) // 每天零点执行            .build();    }}

5. 总结

通过上述的四种方法的实践,无论使用简单的@Scheduled注解还是更灵活的Quartz框架,都可以满足不同项目的需求。选择合适的方式,并结合实际场景,定时任务将为你的应用增添更多的价值和灵活性。


难熬的日子总会过去,不信你回头看看,你都已经在不知不觉中,熬过来很多苦难,余生很长,不必慌张。

文章标签:
目录
相关文章
|
3天前
|
Java
java springboot 8080端口号冲突时 修改当前项目端口号
java springboot 8080端口号冲突时 修改当前项目端口号
600
|
4天前
|
JavaMaven开发工具
IDEA使用Spring Initializr流畅的创建springboot项目
IDEA使用Spring Initializr流畅的创建springboot项目
2000
|
2天前
|
JavaMaven容器
springBoot项目导入外部jar包
springBoot项目导入外部jar包
1044
|
8天前
|
消息中间件JavaKafka
集成Kafka到Spring Boot项目中的步骤和配置
集成Kafka到Spring Boot项目中的步骤和配置
3877
|
3天前
|
JavaMaven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
1411
|
4天前
|
Java程序员
浅浅纪念花一个月完成Springboot+Mybatis+Springmvc+Vue2+elementUI的前后端交互入门项目
浅浅纪念花一个月完成Springboot+Mybatis+Springmvc+Vue2+elementUI的前后端交互入门项目
1811
|
8天前
|
XML搜索推荐Java
Elasticsearch集成到Spring Boot项目
将Elasticsearch集成到Spring Boot项目中,可以方便地实现数据的搜索、分析等功能。
3422
|
8天前
|
监控前端开发Java
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
|
8天前
|
JavaAPISpring
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
4511
|
20小时前
|
IDEJava机器人
Spring Boot中的多模块项目构建
Spring Boot中的多模块项目构建

热门文章

最新文章

  • 1
    基于SpringBoot+HTML实现登录注册功能模块
    193
  • 2
    基于 java + Springboot + vue +mysql 大学生实习管理系统(含源码)
    257
  • 3
    【Java】仓库管理系统 SpringBoot+LayUI+DTree(源码)【独一无二】
    62
  • 4
    SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
    420
  • 5
    SpringBoot项目调用HTTP接口5种方式你了解多少?
    161
  • 6
    6个SpringBoot 项目拿来就可以学习项目经验接私活
    54
  • 7
    Springboot启动的时候初始化的线程池默认配置tomcat
    35
  • 8
    SpringBoot+async异步调用接口以及几个任务同时完成和异步接口实现和调用
    46
  • 9
    SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
    322
  • 10
    SpringBoot中静态类使用配置文件经常遇到读取为NULL的情况,现在我就告诉大家。
    25