Spring Boot定时任务_springboot 定时任务框架

2.Spring Boot定时任务

2.1.快速使用

spring boot支持了定时任务,通过很简单的配置就可以使用。

依赖:

定时任务是spring boot框架提供的基础能力之一,所以其依赖是在spring-boot-starter里面,但是一般开发的时候我们直接引入web依赖即可,web依赖中包含了spring-boot-starter。要注意的是Spring Boot 从版本1.3.0开始提供对定时任务的支持,本文用的依赖默认是支持定时任务的版本。

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

开启定时任务:

任务内容:

2.2.cron表达式

spring boot中是使用cron表达式来定义定时任务的执行条件的。cron表达式由6个字段组成,分别表示秒、分、时、日、月、周几。每个字段都可以接受特定的取值范围或通配符来表示时间的匹配规则。

下面是cron表达式的每个字段的含义和可接受的取值:

  1. 秒(0-59)
  2. 分钟(0-59)
  3. 小时(0-23)
  4. 日(1-31)
  5. 月(1-12或JAN-DEC)
  6. 周几(0-7或SUN-SAT,其中0和7都表示周日)

除了具体的取值范围,cron表达式还支持一些特殊字符和符号:

  • 星号(*):表示匹配任意值。例如,使用星号在秒字段中,表示任务在每一秒都会被触发。
  • 问号(?):仅在日期和周几字段中使用,表示不指定具体的值。如果你想在日期字段中匹配任意值,但同时又想在周几字段中指定具体值,就可以使用问号。
  • 斜线(/):用于指定增量。例如,在分钟字段中使用5/10,表示从第5分钟开始,每隔10分钟触发一次。
  • 逗号(,):用于列举多个值。例如,在周几字段中使用1,3,5,表示任务在周一、周三和周五触发。
  • 连接符(-):用于指定范围。例如,在小时字段中使用9-17,表示任务在9点到17点之间触发。

以下是一些示例cron表达式的用法:

  • 0 0 0 * * *:每天凌晨执行任务
  • 0 0/5 * * * *:每隔5分钟执行任务
  • 0 0 9-17 * * MON-FRI:周一至周五的9点到17点之间每小时执行任务

3.业务示例

3.1.业务描述

需求:

  • 管理人员新建一个问卷调查任务,任务在固定时间发起,固定时间结束。
  • 任务开始后,系统的每个用户会收到一份问卷
  • 任务结束后,用户不可再答题

实体关系:

整个实体关系很简单,就是一个任务一种模板,一个任务多份问卷,一个模板N份问卷,一个问卷一个用户。

问卷里记录了模板内容、任务ID、用户ID。

3.2.业务实现

问卷调查任务类:

这里使用JPA去访问数据库

@Entity
@Table(name = "survey_task")
public class SurveyTask {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String taskName;

    private LocalDateTime startTime;

    // 其他属性和对应的getter/setter方法
}

定时任务:

这里只是简单的写了一下定时任务的逻辑,实际的代码实现从简。

@Service
public class SurveyTaskScheduler {

    @Autowired
    private SurveyTaskRepository surveyTaskRepository;

    @Scheduled(cron = "0 0 0 * * *") // 每天凌晨执行
    public void distributeSurveyTemplates() {
        LocalDate today = LocalDate.now();
        LocalDateTime startOfDay = today.atStartOfDay();

        List<SurveyTask> surveyTasks = surveyTaskRepository.findByStartTime(startOfDay);

        for (SurveyTask task : surveyTasks) {
            // 根据任务分发问卷模板给用户的逻辑
            // ...
            System.out.println("分发问卷模板给用户: " + task.getTaskName());
        }
    }
}

启动定时任务:

@SpringBootApplication
@EnableScheduling
public class MyApp {

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

4.实现原理

spring boot的定时任务底层其实就是使用线程池来实现的,其流程如下:

  1. 首先,Spring Boot 根据配置文件中的属性创建一个 TaskScheduler(如果没有自定义线程池会使用默认线程池ThreadPoolTaskScheduler)实例作为调度器,并设置线程池的相关属性,例如核心线程数、最大线程数、队列容量等。
  2. 当应用启动时,Spring Boot 会扫描所有被 @Scheduled 注解标记的方法,并将这些方法注册为定时任务。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

更新**

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
[外链图片转存中…(img-DhfZNI25-1712861891616)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了一个简单易用的定时任务框架,可以帮助我们方便地在应用程序中创建和管理定时任务Spring Boot定时任务框架基于Spring框架的@Scheduled注解。我们可以通过在方法上添加@Scheduled注解来指定方法的执行时间和频率。@Scheduled注解可以接受多种参数,如cron表达式、固定延迟时间、固定频率等,我们可以根据实际需求选择合适的参数。同时,我们还可以使用@Scheduled注解的其他属性来配置任务的线程池、错误处理以及任务名称等。 使用Spring Boot定时任务框架非常简单。我们只需要在应用程序的配置类或任意一个Bean类中添加@EnableScheduling注解,然后在需要执行定时任务的方法上添加@Scheduled注解即可。框架会自动扫描并注册这些带有@Scheduled注解的方法,按照指定的时间和频率执行任务。 Spring Boot定时任务框架还提供了一些便利的特性。例如,我们可以通过使用@Async注解将定时任务标记为异步执行,提高任务的并发性能。此外,我们还可以通过使用CronExpression和CronTrigger等类,对复杂的定时任务表达式进行解析和处理。 总之,Spring Boot提供的定时任务框架简单易用、功能强大,能够满足各种应用程序的定时任务需求。无论是简单的定时任务还是复杂的计划任务,Spring Boot定时任务框架都能够提供便捷的解决方案,减少我们开发和维护定时任务的工作量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值