首页 > 其他分享 >Springboot定时任务详解

Springboot定时任务详解

时间:2024-12-06 10:33:55浏览次数:9  
标签:Quartz Springboot TaskScheduler class 任务 详解 定时 public

文章目录

Springboot定时任务详解

一、引言

在现代软件开发中,定时任务的执行是自动化和效率的关键。Spring Boot 提供了强大而灵活的定时任务功能,使得开发者可以轻松地管理和执行各种定时任务。本文将详细介绍Spring Boot中实现定时任务的几种方式,包括使用@Scheduled注解、TaskScheduler接口以及集成Quartz框架。

二、cron表达式

在Spring Boot中,@Scheduled注解允许我们以cron表达式的形式定义任务的执行计划。Cron表达式由6或7个时间字段组成,分别代表秒、分、小时、日、月、周和年(可选)。以下是cron表达式的结构和特殊字符的含义:

  • 秒(0-59)
  • 分(0-59)
  • 小时(0-23)
  • 日(1-31)
  • 月(1-12 或 JAN-DEC)
  • 周(0-7 其中0和7都代表周日,或者使用 SUN-SAT)
  • 年(可选字段,1970-2099)

特殊字符包括:

  • *:任何时间
  • ,:列表中指定的多个值
  • -:一个范围内的值
  • /:起始时间开始,每隔一定间隔的值
  • ?:不指定值
  • L:最后一个星期几
  • W:离给定日期最近的工作日(只在日和周字段中有效)
  • #:一个月中的第几个周几

例如,0 0/5 * * * ? 表示每5分钟执行一次任务。

三、使用@Scheduled注解

1、开启定时任务

首先,需要在Spring Boot启动类上添加@EnableScheduling注解,以启用Spring Schedule定时调度功能。如下所示:

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

2、添加定时任务

接着,使用@Component注解标注一个类,在其中需要定时执行的方法上添加@Scheduled注解。例如,每隔1分钟执行一次的方法:

@Component
public class MyScheduleJob {
    @Scheduled(cron = "0/10 * * * * ?")
    public void job1() {
        System.out.println("MyScheduleJob ===> job1:" + LocalDate.now() + " " + LocalTime.now());
    }
}

四、使用TaskScheduler接口

TaskScheduler提供了更灵活的方式来调度任务,可以动态地创建和管理任务。

1、注入TaskScheduler实例

首先,注入TaskScheduler实例,并使用schedule方法来安排任务:

@Component
public class TaskSchedulerExample {
    @Autowired
    private TaskScheduler taskScheduler;

    @PostConstruct
    public void scheduleRunnableWithCronTrigger() {
        taskScheduler.schedule(new RunnableTask(), new CronTrigger("0 0/5 * * * *"));
    }

    static class RunnableTask implements Runnable {
        @Override
        public void run() {
            System.out.println("现在时间:" + new Date());
        }
    }
}

五、集成Quartz框架

Quartz是一个功能强大的任务调度库,可以与Spring Boot集成,提供更复杂的调度需求。

1、集成Quartz

要集成Quartz,首先需要添加Quartz的依赖,并配置Quartz的相关属性。以下是配置Quartz的一个简单示例:

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail sampleJobDetail() {
        return JobBuilder.newJob(SampleJob.class)
                .withIdentity("sampleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger sampleJobTrigger() {
        return TriggerBuilder.newTrigger()
                .forJob(sampleJobDetail())
                .withIdentity("sampleJobTrigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * 1/1 * ? *"))  // 每分钟执行一次
                .build();
    }
}

六、实际使用示例

以下是一个使用Quartz框架的实际示例,其中定义了一个简单的任务,每10秒执行一次:

public class SampleJob implements Job {
    @Override
    public void execute(JobExecutionContext context) {
        System.out.println("Executing Sample Job: " + new Date());
    }
}

配置触发器时,我们使用SimpleScheduleBuilder来定义任务的执行间隔:

@Bean
public Trigger sampleJobTrigger() {
    SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInSeconds(10)  // 每10秒执行一次
            .repeatForever();
    return TriggerBuilder.newTrigger()
            .forJob(sampleJobDetail())
            .withIdentity("sampleJobTrigger")
            .withSchedule(scheduleBuilder)
            .build();
}

七、总结

Spring Boot的定时任务功能非常强大,可以满足各种业务场景的需求。通过@Scheduled注解和TaskScheduler接口,我们可以根据需求配置定时任务的执行规则,实现各种复杂的定时任务调度需求。此外,集成Quartz框架可以处理更复杂的调度任务。合理利用这些工具,可以提高系统的稳定性和可靠性,更好地满足业务需求。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

标签:Quartz,Springboot,TaskScheduler,class,任务,详解,定时,public
From: https://blog.csdn.net/NiNg_1_234/article/details/144283457

相关文章

  • 【开题报告】基于Springboot+vue校园新闻发布系统(程序+源码+论文) 计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库开题报告内容开题报告内容研究背景在当今信息化高速发展的时代,校园作为知识传播与创新的重要场所,其信息传播的效率与质量直接关系到师生的学习与生活。传统的校园新闻发布方式,如公告栏、校报等,已......
  • 基于智能聊天+SpringBoot+Vue的民宿预定管理系统(毕业设计:选题+开题+程序设计+文档+PPT
    文章目录前言详细视频演示系统介绍后台管理技术框架后端采用SpringBoot框架前端框架Vue选题推荐(部分)成品项目展示(部分)系统测试系统测试的目的系统功能测试代码参考为什么选择我?获取源码前言......
  • 基于数据可视化+SpringBoot的志愿者管理系统设计与实现(毕业设计:选题+开题+程序设计+文
    文章目录前言详细视频演示系统介绍后台管理技术框架后端采用SpringBoot框架前端框架Vue选题推荐(部分)成品项目展示(部分)系统测试系统测试的目的系统功能测试代码参考为什么选择我?获取源码前言......
  • 【关注可白嫖源码】springboot校园招聘平台与岗位推荐系统的设计与实现
     摘 要对企业人才求职招聘的管理进行改革创新是提高各个企业并使之良性正面发展的必经之途。随着科技水准对社会经济的愈发依赖以及世界发展的轨迹预测,更少的人力需求,以及简单快捷的管理方式是迈进信息管理现代化的重要指标值。一个完善的企业必然具备相应的且高效的求职招......
  • springboot植物健康系统(代码+数据库+LW)
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了植物健康系统的开发全过程。通过分析植物健康系统管理的不足,创建了一个计算机管理植物健康系统的方案。文章介绍了植物健康系统的系统分析部分,包括可行性分析等,系统设计部分......
  • springboot学生评奖评优管理系统的设计与实现(代码+数据库+LW)
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生评奖评优管理系统的开发全过程。通过分析学生评奖评优管理系统管理的不足,创建了一个计算机管理学生评奖评优管理系统的方案。文章介绍了学生评奖评优管理系统的系统分析......
  • 基于SpringBoot + Vue的零食批发商仓库管理系统
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 基于SpringBoot + Vue的株洲崔氏服装有限公司服装生产管理信息系统设计与实现
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 基于SpringBoot + Vue的旅游门票信息系统设计与实现
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 【附源码】springboot 天气预报管理系统设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......