三种定时任务总结

前言

springboot中设置定时任务有三种常见的方式,分别为:

  1. 基于@Scheduled注解。
  2. 基于Quartz框架。
  3. 基于xxl-job框架。

下面将分别阐述下这三种方式的实现方式和优缺点。

1. @Scheduled

介绍

@Scheduled注解是Spring Framework提供的一个非常简单的创建定时任务的方法,将注解添加在方法。Spring Boot会自动配置一个任务调度器来执行这些方法。

但需要在Spring Boot应用的主类或配置类上添加@EnableScheduling注解来启用定时任务的自动配置。然后,你可以在任何Spring管理的bean上使用@Scheduled注解来声明定时任务。

代码实现
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class ScheduledTasks {@Scheduled(fixedRate = 5000)public void taskWithFixedRate() {// 任务逻辑}@Scheduled(cron = "0 * * * * ?")public void taskWithCronExpression() {// 任务逻辑}
}

@Scheduled(fixedRate = 5000)是taskWithFixedRate()方法每5秒执行一次。

@Scheduled(cron = "0 * * * * ?")是taskWithCronExpression()方法根据cron表达式执行。

优点
  • 简单易用: 只需在方法上添加@Scheduled注解即可,无需复杂配置。
  • 无需额外依赖: Spring框架内置支持,不需要添加额外的库。
  • 集成度高: 与Spring生态系统无缝集成,易于与其他Spring组件协作。
缺点
  • 功能有限:不支持持久化存储任务状态,不适合复杂的调度需求。
  • 不支持分布式: 无法在多个服务实例之间同步任务状态,不适合分布式系统。
  • 缺乏动态控制: 任务调度一旦设定,无法在运行时动态修改(除非重新部署应用)。

2. 基于Quartz框架

介绍

Quartz是一个开源的作业调度库,可以集成到几乎任何Java应用程序中。它提供了丰富的调度选项,包括一次性执行、按照固定间隔重复执行以及基于日历的作业调度。

代码实现
导入依赖
            <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId><version>${spring.version}</version></dependency>
写任务逻辑
package com.account.job;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;/*** @author Hao* @date 2023-11-06 17:00*/
@Component
public class UsernameJob implements Job {@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {// 任务逻辑}
}
配置定时器
package com.account.config;import com.account.job.UsernameJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author Hao* @date 2023-11-06 14:58*/
@Configuration
public class UsernameQuartzConfig {@Beanpublic JobDetail userLogJob() {return JobBuilder.newJob(UsernameJob.class).storeDurably(true).build();}@Beanpublic Trigger usernameJobTrigger() {return TriggerBuilder.newTrigger().forJob(userLogJob()).withSchedule(CronScheduleBuilder.cronSchedule("0 30 * * * ?")) //每30分钟执行一次.build();}
}
优点
  • 功能强大: 支持复杂的调度需求,如任务持久化、事务管理、错过任务的处理等。
  • 支持分布式: 可以在多个节点上同步任务状态,适合分布式部署。
  • 灵活性: 支持动态添加、修改和删除任务,以及更复杂的cron表达式。
缺点
  • 配置复杂: 相较于@Scheduled注解,Quartz需要更多的配置工作。
  • 资源消耗: 因为功能强大,Quartz可能会消耗更多的系统资源。
  • 学习曲线: 对于新手来说,Quartz的API和配置可能需要一定的学习时间。

3. 基于xxl-job框架

介绍

xxl-job是一个分布式任务调度平台,其核心设计目标是开发简单、易扩展、分布式的任务调度解决方案。xxl-job在企业级别的分布式任务调度场景中非常受欢迎。

代码实现
搭建linux服务:搭建教程
导入依赖
        <xxl-job.version>2.3.1</xxl-job.version><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${xxl-job.version}</version></dependency>
yml配置文件
#XXL-job配置
xxl:job:admin:addresses: http://192.168.133.100:9898/xxl-job-adminaccessToken: default_tokenexecutor:# 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册appname: xxl-job-executor-sample# 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;port: 9998
配置类
package com.replication.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author Hao* @date 2023-12-04 11:07*/
@Configuration
public class XxlJobConfig {@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appName;@Value("${xxl.job.executor.port}")private int port;@Beanpublic XxlJobSpringExecutor xxlJobSpringExecutor() {XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setAppname(appName);xxlJobSpringExecutor.setPort(port);return xxlJobSpringExecutor;}
}
注解使用
@XxlJob("helloXxl")
public void xxlJob() {log.debug("xxlJob运行,当前时间:{}", LocalDateTime.now());
}
优点
  • 分布式支持: 设计之初就考虑了分布式场景,适合大规模分布式任务调度。
  • 任务管理: 提供了管理界面,可以方便地对任务进行管理和监控。
  • 高可用性: 支持故障转移和集群部署,提高了任务调度的可靠性。
  • 扩展性: 支持自定义任务类型,可以根据需要扩展任务执行逻辑。
缺点
  • 依赖外部服务: 需要部署xxl-job-admin服务来管理任务,增加了系统复杂性。
  • 额外学习: 需要学习xxl-job的使用和配置,与Spring Boot的集成程度不如@Scheduled注解。
  • 资源消耗: 由于提供了丰富的功能和管理界面,可能会消耗更多的资源。

总结

在选择定时任务框架时,你应该根据你的应用场景和需求来决定。如果你的应用简单,不需要分布式调度和任务持久化,那么@Scheduled注解可能是最简单的选择。如果你需要更复杂的调度功能,或者你的应用是分布式的,那么Quartz或xxl-job可能更适合。xxl-job特别适合于需要集中管理和监控任务的大型分布式系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式基础——工厂模式剖析(2/2)

目录 一、工厂模式 1.1 工厂模式的定义 1.2 工厂模式的设计意图 1.3 工厂模式主要解决的问题 1.4 工厂模式的缺点 1.5 实际的应用案例 1. 数据库连接池 2. 图形用户界面&#xff08;GUI&#xff09;组件 3. 文件操作 二、各种工厂模式的变形 1.1 简单工厂模式&#…

前端开启gzip优化页面加载速度

生成gizp的打包资源&#xff0c;可以优化页面加载速度 打包的时候开启gzip可以很大程度减少包的大小&#xff0c;页面大小可以变为原来的30%甚至更小,非常适合线上部署, 但还记得需要服务端支持 1、前端配置compression-webpack-plugin 先安装&#xff1a;npm install compres…

windows运行orb-slam3遇到的问题

windows版代码地址&#xff1a;https://github.com/melhashash/orbslam3-windows 编译完成&#xff0c;出现初始化不成功的现象。 问题一&#xff1a; 相机参数中没有相机类型&#xff0c;导致畸变参数初始化失败。 GrabImageRGBD中frame对象实例化时&#xff0c;缺少相机参数…

【Windows】永久屏蔽系统更新

永久关闭电脑更新服务 操作思路&#xff1a; 第一步 winR 输入 services.msc 回车 进入服务管理窗口第二步 进入窗口后 找到 w 开头的文件夹 并找到Windows Update 双击打开 Windows Update 将启动类型&#xff08;E&#xff09; 改为禁用 上方的 “常规” “登录” “恢…

EISeg 交互式分割标注软件安装

EISeg(Efficient Interactive Segmentation)是以RITM及EdgeFlow算法为基础&#xff0c;基于飞桨开发的一个高效智能的交互式分割标注软件。涵盖了通用、人像、遥感、医疗、工业质检等不同方向的高质量交互式分割模型&#xff0c;方便开发者快速实现语义及实例标签的标注&#x…

SNP推出新Glue软件Saas版本,助力云数据集成

最新Glue版本可作为软件即服务(SaaS)应用程序使用SAP数据和非SAP数据源之间的云原生集成大大简化了客户的企业数据集成SNP Glue通过应对AI和大数据计划中的关键挑战来增强云数据集成的价值 德国&#xff0c;海德堡 —— 2023年11月29日&#xff0c;作为SAP环境中数字化转型、自…

Vue学习笔记-<router-link>的replace的属性

router-link的replace属性 作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式 浏览器的历史记录有两种写入方式&#xff1a;push和replace&#xff0c;其中push是追加历史记录&#xff08;将浏览的url请求入栈&#xff09;&#xff0c;replace则是替换当前记录。路由跳…

第二十五章 控制到 XML 模式的映射 - 将文字属性映射到 XML 模式

文章目录 第二十五章 控制到 XML 模式的映射 - 将文字属性映射到 XML 模式将文字属性映射到 XML 模式IRIS 数据类型类的默认 XSD 类型 第二十五章 控制到 XML 模式的映射 - 将文字属性映射到 XML 模式 将文字属性映射到 XML 模式 本节讨论如何将文字&#xff08;非集合&#…

如何计算 ChatGPT 的 Tokens 数量?

一、基本介绍 随着人工智能大模型技术的迅速发展&#xff0c;一种创新的计费模式正在逐渐普及&#xff0c;即以“令牌”&#xff08;Token&#xff09;作为衡量使用成本的单位。那么&#xff0c;究竟什么是Token呢&#xff1f; Token 是一种将自然语言文本转化为计算机可以理…

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境

Vim安装 容器重启后默认是vi&#xff0c;升级vim&#xff0c;执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…

【DBeaver】驱动添加-Hive和星环

驱动 Hive驱动 hive驱动可以直接去官网下载官网地址&#xff0c;填一下个人信息。 如果想直接下载可以去我上次的资源下地址&#xff0c;需要用zip解压。 星环驱动 星环驱动是我第一次接触&#xff0c;是国产的基于开源Hive驱动自研的产品&#xff0c;我看到官网上有很多类…

[leetcode ~二叉树] 模版

文章目录 1. 左叶子之和2. 翻转二叉树 E 1. 左叶子之和 :::details 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&…

跨浏览器测试:如何确保你的应用在各种浏览器上都能正常运行

在当今的互联网时代&#xff0c;浏览器已成为我们获取信息、与他人交流、工作和娱乐的主要工具。然而&#xff0c;不同的浏览器、不同的版本和不同的操作系统可能会对你的应用造成不同的影响&#xff0c;可能使其表现出各种不同的行为和问题。为了确保你的应用能在各种浏览器环…

GaussDB数据库SQL系列-序列的使用

目录 一、前言 二、GaussDB数据库中的序列 1、语法(CREATE SEQUENCE) 2、注意事项 三、GaussDB数据库中的示例 1、示例一&#xff1a;创建普通序列 2、示例二&#xff1a;创建与表关联的序列 四、小结 一、前言 在数据库管理中&#xff0c;序列&#xff08;SEQUENCE&a…

Nginx的使用

Nginx的使用 一、配置前端项目访问二、配置SSL证书1、正常配置2、配置报错 三、配置域名反向代理1、简单代理2、带参数代理3、指定后缀域名跳转4、访问反向代理域名的静态资源5、配置静态资源访问&#xff08;1&#xff09;、将域名配置到小程序&#xff0c;获得TXT文件&#x…

电池出现零电压和不能充放电的原因

1.单体电池出现零电压或低电压的可能原因是什么&#xff1f; 01&#xff09;电池外部短路或过充、反充&#xff08;强制过放&#xff09;&#xff1b; 02&#xff09;电池受高倍率大电流连续过充&#xff0c;导致电池极芯膨胀&#xff0c;正负极直接接触短路等…

GB/T 29734.1-2013 铝木复合门窗检测

铝木复合门窗是指采用铝合金型材与木型材通过连接卡件或螺钉等连接方式制作的框、扇构件的门窗。 GB/T 29734.1-2013 铝木复合门窗检测项目 测试项目 测试标准 外观质量 GB/T 29734.1 尺寸 GB/T 29734.1 装配质量 GB/T 29734.1 抗风压性能 GB/T 7106 水密性 GB/T 7…

leetcode:对称二叉树

题目描述 题目链接&#xff1a;101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目中说至少存在一个节点&#xff0c;所以我们只需要对比左右子树 写一个子函数对比左右子树&#xff1a;用递归的思路&#xff0c;左子树的左子树和右子树的右子树对比&…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B 需要环境或者解析可以私信 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&…

使用Python Flask搭建Web问答应用程序并发布到公网远程访问

使用Python Flask搭建web问答应用程序框架&#xff0c;并发布到公网上访问 文章目录 使用Python Flask搭建web问答应用程序框架&#xff0c;并发布到公网上访问前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程…