@Scheduled,Quartz,XXL-JOB三种定时任务总结

@Scheduled,Quartz,XXL-JOB三种定时任务总结

一、@Scheduled

简介

@Scheduled 是 Spring 框架中用于声明定时任务的注解。通过使用 @Scheduled 注解,你可以指定一个方法应该在何时执行,无需依赖外部的调度器。

这个注解通常与@EnableScheduling 注解一起使用,后者用于启用 Spring 的任务调度功能。当在一个类的方法上使用 @Scheduled 注解时,Spring 框架会自动创建一个定时任务,并按照指定的规则执行该方法。

简单使用

首先建好一个Spring Boot项目,在启动类上加@EnableScheduling开启Spring的任务调度功能,创建一个类,再其方法上加上注解@Scheduled,通过cron表达式来指定什么时候执行该方法。

@SpringBootApplication
@EnableScheduling
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class);
    }
}
@Component
public class ScheduleTest {
    @Scheduled(cron = "0/3 * * * * ?")
    public void testScheduled() {
        //每3秒执行一次
        System.out.println("你好");
    }
}

image-20231204205531391

二、Quartz

简介

Quartz是一个开源的、功能强大且灵活的作业调度框架,它支持复杂的调度需求,作业持久化、集群部署等功能。它允许你按照设定的时间规则执行特定的任务,例如定时执行、循环执行、间隔执行等。Quartz可以与Spring等框架无缝集成,被广泛应用于企业级应用中。

简单使用

pom.xml中导入依赖

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

创建一个定时器任务类,实现QuartzJobBean接口的方法

public class QuartzTest extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("我是Quartz,你好");
    }
}

创建Quartz配置类,构建定时任务触发器

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(QuartzTest.class)
                .storeDurably(true)
                .build();
    }

    @Bean
    public Trigger trigger() {
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail())
                .withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?"))
                .build();
    }
}

项目启动后,你就能看到控制台每3秒就会打执行一次

image-20231204210647717

三、XXL-Job

简介

XXL-JOB是一个分布式任务调度平台,用于在分布式系统中进行任务调度和管理。XXL-JOB提供了可视化的任务管理界面、任务的动态添加、修改、删除等功能。它支持分布式部署,并提供了任务执行日志、任务运行状态等监控功能。XXL-Job是为了解决分布式系统中任务调度的问题而设计的,适合于大规模分布式系统中的定时任务调度。

简单使用

使用docker-compose安装

查找镜像,选择xuxueli/xxl-job-admin

[root@localhost /]# docker search xxl-job
NAME                                              DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
vulhub/xxl-job                                                                                     1                    
xuxueli/xxl-job-admin                             A lightweight distributed task scheduling fr…   150       

新建一个目录xxl-job,在它下面建一个logs目录和一个docker-compose.yml文件

[root@localhost xxl-job]# pwd
/usr/local/software/xxl-job
[root@localhost xxl-job]# ls
docker-compose.yml  logs

编辑docker-compose.yml(每个人的MySQL地址和ip不一样注意修改)

version: '2'
#自定义的docker网络
networks:
  wn_docker_net:
    external: true
services:
  xxl-job-compose:
    #读取Dockerfile
    #build: .
    #镜像名称
    image: xuxueli/xxl-job-admin:2.3.1
    #容器名称
    container_name: xxl-job
    ports:
      - '9898:8080'
    environment:
      PARAMS: '--spring.datasource.url=jdbc:mysql://192.168.100.128:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
               --spring.datasource.username=root
               --spring.datasource.password=123'
    volumes:
      - /usr/local/software/xxl-job/logs:/data/applogs
    networks:
      wn_docker_net:
        ipv4_address: 172.18.12.100

进入xxl-job官网https://www.xuxueli.com/xxl-job/的github或gitee里的doc/db目录下找到建库语句tables_xxl_job.sql建数据库

docker-compose up -d后台构建执行

浏览器输入(你自己虚拟机的ip)192.168.100.128:9898/xxl-job-admin,用户为建库后的xxl_job_user表中的数据

image-20231204211632865

image-20231204211727635

Spring Boot整合XXL-Job

导入依赖

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.4.0</version>
</dependency>

配置application-xxljob.yml,进行一些执行器的配置

server:
  port: 13000

#xxljob的配置
xxl:
  job:
    admin:
      addresses: http://192.168.100.128:9898/xxl-job-admin/
    executor:
      appname: xxl-job-executor-sample
      port: 9777
    accessToken: default_token

logging:
  level:
    com.wnhz.ssc: debug

创建XxlJobConfig配置类,导入刚才在yml文件中的配置

@Configuration
@Slf4j
public class XxlJobConfig {

    @Value("${xxl.job.admin.addresses}")
    private String addresses;
    @Value("${xxl.job.executor.appname}")
    private String appName;
    @Value("${xxl.job.executor.port}")
    private int port;
    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(addresses);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        log.debug("xxl-job初始化成功:{}", xxlJobSpringExecutor);
        return xxlJobSpringExecutor;
    }
}

创建XxlJob定时任务

@Slf4j
@Component
public class MyXxlJob {
    @XxlJob("hello-xxljob")
    public void job() {
        log.debug("我的第一个xxljob");
    }
}

在XXL-Job任务调度中心中的任务管理中添加任务

点击新增

image-20231204212635364

启动spring项目

点击启动

image-20231204212840897

可以看到xxl-job启动成功

总结

Schedule是计划执行任务的通用术语。Quartz是Java任务调度框架,支持灵活任务管理。XXL-JOB是分布式任务调度平台,注重大规模系统,提供分布式任务调度和管理,包括动态调度、监控、日志记录等功能。选择取决于应用需求,Quartz适用于Java应用,XXL-JOB适用于分布式环境。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python的安装

python官网地址&#xff1a;https://www.python.org/ 以在windows下安装3.12.0版本为例。 下载安装包&#xff1a; 下载下来的安装包是python-3.12.0-amd64.exe&#xff0c;双击安装&#xff0c;按照提示&#xff0c;一步一步往下走&#xff1a; 到cmd下&#xff0c;输入py…

postgresql pg_hba.conf 配置详解

配置文件之pg_hba.conf介绍 该文件用于控制访问安全性&#xff0c;管理客户端对于PostgreSQL服务器的访问权限&#xff0c;内容包括&#xff1a;允许哪些用户连接到哪个数据库&#xff0c;允许哪些IP或者哪个网段的IP连接到本服务器&#xff0c;以及指定连接时使用的身份验证模…

单片机的扩展结构

目录 三种总线的构造方式 地址空间分配和外部地址锁存器 1.存储器地址空间分配 (1)74LS138 (2)74LS139 2.外部地址锁存器 (1)锁存器74LS373 静态数据存储器RAM的并行扩展 (1)常用的静态RAM (SRAM)芯片 (2)外扩数据存储器的读写操作时序 1.读片外RAM操作时序 2.写片…

JDK8新特性——Stream流

文章目录 一、Stream流体验二、Stream流的创建三、Stream流中间方法四、Stream流终究方法 Stream流&#xff08;也叫Stream API&#xff09;。它是从JDK8以后才有的一个新特性&#xff0c;是专业用于对集合或者数组进行便捷操作的 一、Stream流体验 需求&#xff1a;有一个Lis…

【学习笔记】混淆矩阵

混淆矩阵&#xff08;Confusion Matrix&#xff09;&#xff0c;又称为错误矩阵&#xff0c;是一种特别适用于监督学习中分类问题评估模型性能的工具。在机器学习领域&#xff0c;混淆矩阵能够清晰地显示算法模型的分类结果和实际情况之间的差异&#xff0c;常用于二分类和多分…

vscode里面使用vue的一些插件,方便开发

1、vue 2 Snippets &#xff08;vue语法提示&#xff09; vue提示这个也可以 1.1 Vue VSCode Snippets 2、vetur Vetur支持.vue文件的语法高亮显示&#xff0c;除了支持template模板以外 3、Element UI Snippets(饿了么的提示) 4、indent-rainbow&#xff08;缩进高亮提示) 5…

《开箱元宇宙》:Madballs 解锁炫酷新境界,人物化身系列大卖

你是否曾想过&#xff0c;元宇宙是如何融入世界上最具代表性的品牌和名人的战略中的&#xff1f;在本期的《开箱元宇宙》 系列中&#xff0c;我们与 Madballs 的战略顾问 Derek Roberto 一起聊聊 Madballs 如何在 90 分钟内售罄 2,000 个人物化身系列&#xff0c;以及是什么原…

【开源】基于Vue.js的新能源电池回收系统

文末获取源码&#xff0c;项目编号&#xff1a; S 075 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S075。} 文末获取源码&#xff0c;项目编号&#xff1a;S075。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回…

Nginx(缓存机制)

对于性能优化而言&#xff0c;缓存是一种能够大幅度提升性能的方案&#xff0c;因此几乎可以在各处都能看见缓存&#xff0c;如客户端缓存、代理缓存、服务器缓存等等&#xff0c;Nginx的缓存则属于代理缓存的一种。对于整个系统而言&#xff0c;加入缓存带来的优势额外明显&am…

创新零售巨头:揭开山姆与Costco蓬勃发展背后的秘密

会员制商店这个冷门的业态突然之间硝烟弥漫&#xff0c;更多的资本开始涌向付费会员商店这一业态&#xff0c;本文即将探讨的是付费会员制的成功秘诀和零售企业可行的发展路径。Costco的发展经验对国内超市巨头的崛起具有显著的借鉴意义&#xff0c;以优质低价商品服务为中心&a…

CVE-2016-2510CVE-2017-5586 BeanShell漏洞

前言&#xff1a; 首先我们需要了解BeanShell具体是做什么&#xff1a; BeanShell 是一种轻量级的可嵌入式脚本语言&#xff0c;用于在 Java 环境中执行脚本代码。它提供了一种简单、灵活的方式来扩展和定制 Java 应用程序的行为&#xff0c;允许开发人员动态地执行和评估脚本…

CSS实现瀑布流

多列布局介绍 多列布局 指的是 CSS3 可以将文本内容设计成像报纸一样的多列布局&#xff0c;例&#xff1a; CSS3 的多列布局属性: column-count&#xff1a;指定了需要分割的列数&#xff1b;column-gap&#xff1a;指定了列与列间的间隙&#xff1b;column-rule-style&#…

Mybatis如何执行批量操作

文章目录 Mybatis如何执行批量操作使用foreach标签 使用ExecutorType.BATCH如何获取生成的主键 Mybatis如何执行批量操作 使用foreach标签 foreach的主要用在构建in条件中&#xff0c;它可以在SQL语句中进行迭代一个集合。foreach标签的属性主要有item&#xff0c;index&…

MySQL系统函数

select version();查看mysql版本。 select user();可以查看数据库用户名。 select database();可以查看数据库名。 select system_use();可以查看系统用户名。 show variables like %basedir%;可以展示数据库读取路径。 show variables like %sets_dir%;可以看一下安…

★136. 只出现一次的数字(位运算)

136. 只出现一次的数字 这个题主要考察的知识点是位运算&#xff08;这里是异或&#xff09; 如果不要求空间复杂度为O&#xff08;1&#xff09;&#xff0c;那有很多方法。但是这里有这样的要求。 可以通过位运算 的方法来实现。 异或运算 ⊕有以下三个性质&#xff1a; 任…

文字转语音、语音转文字! AI视频生成神器!

分享一波文字转语音、语音转文字&#xff01;AI视频生成神器&#xff01;让外国人说中文&#xff0c;口型自然&#xff0c;不限语言&#xff0c;感兴趣的同学可以试试~ 可以用Al生成视频&#xff0c;Whisper语音转文字 Whisper 开源项目&#xff1a; https://github.com/Const…

【源码解析】聊聊线程池 实现原理与源码深度解析(二)

AbstractExecutorService 上一篇文章中&#xff0c;主要介绍了AbstractExecutorService的线程执行的核心流程&#xff0c;execute() 这个方法显然是没有返回执行任务的结果&#xff0c;如果我们需要获取任务执行的结果&#xff0c;怎么办&#xff1f; Callable 就是一个可以获…

(C语言)通过循环按行顺序为一个矩阵赋予1,3,5,7,9,等奇数,然后输出矩阵左下角的值。

#include<stdio.h> int main() {int a[5][5];int n 1;for(int i 0;i < 5;i ){for(int j 0;j < 5;j ){a[i][j] n;n 2;}}for(int i 0;i < 5;i ){for(int j 0;j < i;j )printf("%-5d",a[i][j]);printf("\n");}return 0; } 运行截图…

电子学会C/C++编程等级考试2022年06月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:公共子序列 我们称序列Z = < z1, z2, ..., zk >是序列X = < x1, x2, ..., xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, ..., ik >,使得对j = 1, 2, ... ,k, 有xij = zj。比如Z = < a, b, f, c &…

【信息安全】MD5哈希函数

1. MD5介绍 MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常见的哈希函数&#xff0c;通常用于产生数据的数字摘要&#xff0c;也称为哈希值或摘要值。它是由Ron Rivest在1991年设计的&#xff0c;广泛用于数据完整性验证、密码存储、数字签名等领域。 MD5哈…