SpringBoot开发——Spring Boot 3种定时任务方式

news/2024/11/8 23:28:04 标签: spring boot, 定时任务

文章目录

  • 一、什么是定时任务
  • 二、代码示例
    • 1、 @Scheduled 定时任务
    • 2、多线程定时任务
    • 3、基于接口(SchedulingConfigurer)实现动态更改定时任务
      • 3.1 数据库中存储cron信息
      • 3.2 pom.xml文件中增加mysql依赖
      • 3.3 application.yaml文件中增加mysql数据库配置:
      • 3.4 创建定时器
      • 3.5 启动测试

一、什么是定时任务

在项目开发过程中,经常会使用到定时任务。顾名思义,定时任务一般指定时执行的方法。例如,每天凌晨0点同步 A 系统的数据到 B 系统;每2小时统计用户的积分情况;每周一给支付宝用户推送上周收入支出数据报表等等。
一般情况下,很多业务会定时在凌晨进行处理。因为这能避开用户使用高峰期,空闲时服务器资源充足,而且对用户影响小。
通过 Spring Boot 框架,我们可以使用3种方式来实现定时任务

  • 第1种是基于注解的方式,比较常用,但是这种在程序运行过程种不能动态更改定时任务的时间。
  • 第2种是可以动态更改定时任务的时间。
  • 第3种是可以动态更改定时任务的时间,还可以动态启动,停止定时任务

二、代码示例

1、 @Scheduled 定时任务

使用 Spring Boot 内置的注解方式,即在需要定时执行的方法上添加@Scheduled注解即可。定时执行的方法不能有参数,并且一般没有返回值,即使有返回值也没什么用。注意定时任务所在的类要作为 Spring Bean,在类上添加@Component注解即可。

package com.chenpi.springschedule.task;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @author 
 * @version 1.0
 * @description 定时任务类
 * @date 2024-11-05
 */
@Component
public class ScheduledTask {
   

  private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledTask.class);

  // 每5秒执行一次
  @Scheduled(cron = "0/5 * * * * ? ")
  public void test() {
   
    LOGGER.info(">>>>> ScheduledTask doing ...");
  }
}

然后在启动类上添加@EnableScheduling注解开启定时任务。默认情况下,系统会自动启动一个线程,调度执行项目中定义的所有定时任务

package com.chenpi.springschedule;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class Application {
   

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

}

启动项目,即可在控制台中每5秒看到定时任务被执行

2024-11-05 20:46:55.011  INFO 11800 --- [ scheduling-1] c.c.springschedule.task.ScheduledTask    : >>>>> ScheduledTask doing ...
2024-11-05 20:47:00.014  INFO 11800 --- [ scheduling-1] c.c.springschedule.task.ScheduledTask    : >>>>> ScheduledTask doing ...
2024-11-05 

http://www.niftyadmin.cn/n/5744548.html

相关文章

鸿蒙多线程开发——并发模型对比(Actor与内存共享)

1、概 述 并发是指在同一时间段内,能够处理多个任务的能力。为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发:指异步代码在执行到一定程度后会被…

LabVIEW扫描探针显微镜系统

开发了一套基于LabVIEW软件开发的扫描探针显微镜系统。该系统专为微观尺度材料的热性能测量而设计,特别适用于纳米材料如石墨烯、碳纳米管等的研究。系统通过LabVIEW编程实现高精度的表面形貌和热性能测量,广泛应用于科研和工业领域。 项目背景 随着纳…

如何创建备份设备以简化 SQL Server 备份过程?

SQL Server 中的备份设备是什么? 在 SQL Server 中,备份设备是用于存储备份数据的物理或逻辑介质。备份设备可以是文件、设备或其他存储介质。主要类型包括: 文件备份设备:通常是本地文件系统中的一个或多个文件。可以是 .bak 文…

开源数据库 - mysql - innodb源码阅读 - master线程(一)

master struct /** The master thread controlling the server. */void srv_master_thread() {DBUG_TRACE;srv_slot_t *slot; // 槽位THD *thd create_internal_thd(); // 创建内部线程ut_ad(!srv_read_only_mode); //断言 srv_read_only_mode 为 falsesrv_main_thread_proce…

MySQL核心业务大表归档过程

记录一下2年前的MySQL大表的归档,当时刚到公司,发现MySQL的业务核心库,超过亿条的有7张表,最大的表有9亿多条,有37张表超过5百万条,部分表行数如下: 在测试的MySQL环境 : pt-archiv…

(一)NodeJS环境安装、创建第一个Vue应用

(一)环境安装、创建第一个Vue应用 Vue官网Windows上安装Node.js安装Node.js开发工具使用选择VSWebStorm 2021.3 创建第一个Vue应用(通过 CDN 使用 Vue)通过脚本引入:如何使用呢?页面效果 Vue官网 Vue官网&a…

Go的数组,slice切片,map的使用

在Go语言中,数组是一种固定长度的数据结构,可以存储同一类型的元素。数组的长度是数组类型的一部分,因此在定义时必须明确指定长度。数组的元素可以通过索引访问,索引从0开始。 1. 数组的声明与初始化 在Go中,可以使…

事务注解@Transactional失效的情况解析

文章目录 前言1. 动态代理无法实现2. Spring管理不当3. 事务遇到异常未回滚 前言 理解Transactional注解失效的情况,先要谈Spring中注解的实现原理,是以动态代理的形式出现的,如果无法实现动态代理,注解自然就无法生效。另外&…