SpringBoot常用定时器库整合(Java Timer、线程池、Quartz、Task)

2023-11-15

简介

定时器可用于做数据统计、年度报表、定时刷新token等。

本章主要描述以下常用定时器库的用法:

1.Java Timer

2.Java 线程池

3.Quartz

4.Spring Task

Java Timer定时器用法

在java中自带了TimerTask抽象类用于定时器,用法如下:

Timer timer = new Timer();
// 两秒执行一次
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("定时器执行...");
    }
}, 0, 2000L);

Java 线程池定时器用法

ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(10);
// 第一个参数放Runnable/Callable 线程实现,第二个参数0秒后执行,第三个参数每隔2秒执行一次
threadPool.scheduleAtFixedRate(() -> {
	System.out.println("定时器执行...");
}, 0, 2L, TimeUnit.SECONDS);

SpringBoot 整合Quartz

使用java原生的定时器不够灵活,Quartz可实现复杂的业务还支持cron表达式,整合如下:

pom.xml导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

Quartz配置类主要包含以下三个步骤:

  1. 编写任务实现类
  2. 定义工作明细
  3. 绑定任务触发器

代码如下:

import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.QuartzJobBean;

@Configuration
@Slf4j
public class QuartzConfig {

    // 任务实现类
    public class Task1 extends QuartzJobBean {
        @Override
        protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
            log.info("quartz 任务执行...");
        }
    }

    // 任务明细
    @Bean
    public JobDetail jobDetail(){
        return JobBuilder.newJob(Task1.class).storeDurably().build();
    }

    // 绑定任务触发器
    @Bean
    public Trigger printJobTrigger(@Autowired JobDetail jobDetail){
        // cron表达式为每5秒执行一次
        return TriggerBuilder.newTrigger().forJob(jobDetail)
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
    }
}

打印如下:

2022-09-04 22:37:17.095  INFO 30308 --- [           main] com.terry.App                            : Started App in 1.734 seconds (JVM running for 2.959)
2022-09-04 22:37:20.014  INFO 30308 --- [eduler_Worker-1] com.terry.QuartzConfig                   : quartz 任务执行...
2022-09-04 22:37:25.015  INFO 30308 --- [eduler_Worker-2] com.terry.QuartzConfig                   : quartz 任务执行...
2022-09-04 22:37:30.006  INFO 30308 --- [eduler_Worker-3] com.terry.QuartzConfig                   : quartz 任务执行...
2022-09-04 22:37:35.008  INFO 30308 --- [eduler_Worker-4] com.terry.QuartzConfig                   : quartz 任务执行...

Spring Task

开启定时器

@SpringBootApplication
@EnableScheduling
public class App {

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

定时器类设置 cron表达式

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class TaskBean {

    @Scheduled(cron = "0/1 * * * * ?")
    public void print(){
        log.info("spring task 执行中...");
    }
}

运行如下:

2022-09-04 22:45:05.655  INFO 13676 --- [           main] com.terry.App                            : Started App in 1.743 seconds (JVM running for 3.108)
2022-09-04 22:45:06.012  INFO 13676 --- [   scheduling-1] com.terry.TaskBean                       : spring task 执行中...
2022-09-04 22:45:07.003  INFO 13676 --- [   scheduling-1] com.terry.TaskBean                       : spring task 执行中...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot常用定时器库整合(Java Timer、线程池、Quartz、Task) 的相关文章

随机推荐

  • 前后端利用accessToken与refreshToken无感刷新

    项目初衷 以jwt 由header payload和signature组成 为例 用户登录成功 后端返回accessToken 前端保存 请求接口携带 一切都是水到渠成的 可是在acessToken失效时 你正好请求一次接口 接口就挂了 可
  • SpringBoot集成ShedLock分布式定时任务

    文章目录 前言 一 背景 二 ShedLock是什么 三 落地实现 1 1 引入依赖包 1 2 配置数据库连接信息 1 3 创建Mysql数据表 1 4 配置LockProvider 1 5 创建定时Job 四 结果分析 前言 一 背景 在
  • 【性能测试】Jmeter —— jmeter计数器

    jmeter计数器 如果需要引用的数据量较大 且要求不能重复或者需要递增 那么可以使用计数器来实现 如 新增功能 要求名称不能重复 1 新增计数器 计数器 允许用户创建一个在线程组之内都可以被引用的计数器 计数器允许用户配置一个起点 一个最
  • 《Go语言在微服务中的崛起:为什么Go是下一个后端之星?》

    博主猫头虎 带您进入 Golang 语言的新世界 博客首页 猫头虎的博客 面试题大全专栏 文章图文并茂 生动形象 简单易学 欢迎大家来踩踩 IDEA开发秘籍专栏 学会IDEA常用操作 工作效率翻倍 100天精通Golang 基础入门篇 学会
  • c语言 常量表达式,Constant expressions(常量表达)

    几种表达式被称为常量表达式 预处理器常量表达式 if 或 elif 后面的表达式必须扩展为 除赋值 增量 减量 函数调用或逗号之外的其他操作符 其参数是预处理常量表达式 整数常量 字符常量 特殊的预处理器操作员 defined 当在 if表
  • 面试题 : Top-k问题

    目录 简介 题目 示例 提示 开始解题 1 思路 2 解题代码 3 时间复杂度 4 运行结果 编辑 目前问题 真正的解法 1 以找前K个最大的元素为例 2 代码执行过程 时间复杂度的计算 3 画图演示代码执行过程 4 解题代码 两种解法的比
  • webpack3 配置详解

    今天详细的学习了webpack3 下面贴出我的主要配置代码给后来人一些参考 Created by shanpengfei051 on 2018 1 3 const path require path const uglify require
  • H264编码原理(I帧B帧P帧)

    I帧B帧P帧 编码帧的分类 I帧 intraframe frame 关键帧 采用帧内压缩技术 IDR帧属于I帧 每个GOP组中第一帧肯定是I帧 而且还是一种特殊的I帧 也可以称为IDR帧 一个GOP中可能有很多I帧 但是只有一个IDR帧 如
  • MySQL 行转列 列转行

    转载 mysql 行转列 列转行 行转列 准备数据 CREATE TABLE tb score id INT 11 NOT NULL auto increment userid VARCHAR 20 NOT NULL COMMENT 用户i
  • centos7安装apache

    centos7安装apache 第一步 检查是否有旧版本的apache 有就卸载 rpm qa grep httpd 因为我没有 就没有卸载的动作 第二步 安装apache yum install httpd 默认yes 可以添加参数 y
  • Linux环境下安装ssh2模块

    环境 Linux环境 Centos or RedHat 1 确认环境已安装php 5 rpm qa grep php 5 php 5 3 3 48 el6 8 x86 64 2 安装ssh2所依赖的rpm包如下图灰色部分显示 安装顺序可以按
  • Less-22 Cookie Injection- Error Based- Double Quotes - string (基于错误的双引号字符型Cookie注入)

    这关和上一关类似 只不过把单引号注入改成了双引号 看题目 尝试取消报错 成功 发现and后面的条件真假回显会不同 所以我们同样有很多的方法去注入 详见第二十关 这里我们使用联合查询 其他方法自行进行解码 很简单 结束
  • cocos2d-x 物理世界与spine骨骼的运用

    Head ifndef HELLOWORLD SCENE H define HELLOWORLD SCENE H include cocos2d h include spine spine h include E tesetspine co
  • 第四部分、JEECG-BOOT 微服部署文档

    文章目录 第四部分 微服部署文档 微服务部署 一 制作各个服务JAR包 二 配置host 三 初始化Mysql数据库 四 启动微服务各个组件 五 前端部署 六 其他软件安装 第四部分 微服部署文档 微服务部署 后端服务通过JAR方式运行 支
  • JAVA中的比较器

    引出 传统的对象之间是一般都是 或者 看对象是否为同一个 而没有存在 gt 或者 lt 类似的 但有的时候我们需要根据 对象的某一个属性进行排序 怎么办呢 这个时候就引出来 比较器了 主要是两个接口 Comparable和Comparato
  • python 获取指定文件夹里面的图片文件的信息

    import time import exifread import os 切换到图片文件夹 由于我的这个文件夹里全部是图片文件所以无需判断直接遍历 os chdir news aa 遍历所有图片文件 for x y z in os wal
  • 简单的动态规划——装箱问题

    装箱问题 告诉你箱子的容积为多少 告诉你有N件物品和每一件物品的体积 问如何选择物品才能令箱子的剩余容积最小 搜索递归 include
  • spring动态修改bean

    spring动态修改bean RequestMapping ok public Object test2 ApplicationContext applicationContext SpringContextUtil getApplicat
  • android canvas 转bitmap_Android 雪花飘落动画效果 自定义View

    在码农的世界里 优美的应用体验 来源于程序员对细节的处理以及自我要求的境界 年轻人也是忙忙碌碌的码农中一员 每天 每周 都会留下一些脚印 就是这些创作的内容 有一种执着 就是不知为什么 如果你迷茫 不妨来瞅瞅码农的轨迹 本文章实现的效果如下
  • SpringBoot常用定时器库整合(Java Timer、线程池、Quartz、Task)

    简介 定时器可用于做数据统计 年度报表 定时刷新token等 本章主要描述以下常用定时器库的用法 1 Java Timer 2 Java 线程池 3 Quartz 4 Spring Task Java Timer定时器用法 在java中自带