XXL-JOB 任务调度平台实践

news2024/10/3 0:32:39

XXL-JOB 任务调度平台实践

  • 一、调度中心(服务端)
    • 1、从gitbub 获取项目源码:[https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job)
    • 2、从源码中得到SQL脚本创建和初始化数据库
    • 3、Maven 编译打包 xxl-job-admin 并部署为调度中心
    • 4、启动运行 xxl-job-admin,并访问 http://localhost:8080/xxl-job-admin
  • 二、开发XXL-JOB执行器(客户端)
    • 1、创建一个新项目(New Module)
    • 2、配置任务调度中心
      • ①新增执行器:
      • ②新增任务管理:
      • ③查看调度日记

连接视频

一、调度中心(服务端)

1、从gitbub 获取项目源码:https://github.com/xuxueli/xxl-job

在这里插入图片描述

在这里插入图片描述

修改 xxl-job项目的配置文件【application.properties】,修改数据库连接为自己的数据库,修改发送邮件配置

### xxl-job, access token #设置访问xxl-job的token设值
xxl.job.accessToken=123456

2、从源码中得到SQL脚本创建和初始化数据库

sql文件位置:
在这里插入图片描述

在这里插入图片描述

3、Maven 编译打包 xxl-job-admin 并部署为调度中心

4、启动运行 xxl-job-admin,并访问 http://localhost:8080/xxl-job-admin

默认用户名:admin 密码:123456

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、开发XXL-JOB执行器(客户端)

1、创建一个新项目(New Module)

在这里插入图片描述

客户端(spring-xxl-job)

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zzp</groupId>
    <artifactId>spring-xxl-job</artifactId>
    <version>1.0.0</version>

	<packaging>war</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>


    </dependencies>

</project>

拷贝xxl-job-executor.properties配置文件在在resources目录下【参考xxl-job-executor-samples目录下的xxl-job-executor-sample-spring项目的xxl-job-executor.properties配置文件】

xxl-job-executor.properties文件

### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
# 连接哪个服务中心
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin 

### xxl-job, access token
# 和服务端设置的配置accessToken保持一致
xxl.job.accessToken=123456

### xxl-job executor appname
# 执行器的名字
xxl.job.executor.appname=spring-xxl-job
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
# 执行器的地址
xxl.job.executor.address=
### xxl-job executor server-info
# 执行器的ip(客户端的ip)
xxl.job.executor.ip=127.0.0.1
# 执行器的端口(客户端的端口)
xxl.job.executor.port=9999
### xxl-job executor log-path
# 日记存储地址
xxl.job.executor.logpath=F:/xxl-job/log
### xxl-job executor log-retention-days
# 日记存储有效天数
xxl.job.executor.logretentiondays=30

在resources目录下添加applicationContext.xml配置文件【参考xxl-job-executor-samples目录下的xxl-job-executor-sample-spring项目的applicationcontext-xxl-job.xml配置文件】

applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="propertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="fileEncoding" value="utf-8" />
        <property name="locations">
            <list>
                <value>classpath*:xxl-job-executor.properties</value>
            </list>
        </property>
    </bean>

    <!-- ********************************* 基础配置 ********************************* -->

    <!-- 配置01、JobHandler 扫描路径 在本地项目中创建包 -->
    <context:component-scan base-package="com.zzp.executor" />

    <!-- 配置02、执行器 依赖包 读取xxl-job-executor.properties文件中的配置 -->
    <bean id="xxlJobSpringExecutor" class="com.xxl.job.core.executor.impl.XxlJobSpringExecutor" >
        <!-- 执行器注册中心地址[选填],为空则关闭自动注册 -->
        <property name="adminAddresses" value="${xxl.job.admin.addresses}" />
        <!-- 访问令牌[选填],非空则进行匹配校验 -->
        <property name="accessToken" value="${xxl.job.accessToken}" />
        <!-- 执行器AppName[选填],为空则关闭自动注册 -->
        <property name="appname" value="${xxl.job.executor.appname}" />
        <!-- 注册地址[选填],优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址 -->
        <property name="address" value="${xxl.job.executor.address}" />
        <!-- 执行器IP[选填],为空则自动获取 -->
        <property name="ip" value="${xxl.job.executor.ip}" />
        <!-- 执行器端口号[选填],小于等于0则自动获取 -->
        <property name="port" value="${xxl.job.executor.port}" />
        <!-- 执行器日志路径[选填],为空则使用默认路径 -->
        <property name="logPath" value="${xxl.job.executor.logpath}" />
        <!-- 日志保存天数[选填],值大于3时生效 -->
        <property name="logRetentionDays" value="${xxl.job.executor.logretentiondays}" />
    </bean>

</beans>

在这里插入图片描述

创建MyJobHandler类【参考xxl-job-executor-samples目录下的xxl-job-executor-sample-spring项目的SampleXxlJob.java类】

MyJobHandler.java

package com.zzp.executor;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 此类就是真正的定时任务业务处理类(Bean模式)
 *
 * 也就是真正的定时任务功能逻辑在此类中完成(比如:定时对账,定时发送短信,定时清理)
 *
 * 开发步骤:
 *  1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"
 *  2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
 *  3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
 *
 */
@Component
public class MyJobHandler {

    private  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob(value = "myJobHandler")
    public ReturnT<String> myJobHandler(String param) throws Exception {
        //在改方法里面编写真正的定时任务功能逻辑 比如:定时对账,定时发送短信,定时清理
        XxlJobLogger.log("XXL-JOB, myJobHandler start:" + sdf.format(new Date()));
        XxlJobLogger.log("XXL-JOB, myJobHandler param:" + param);
        return ReturnT.SUCCESS;
    }

}

因为spring-xxl-job是web项目,需要web【拷贝xxl-job-executor-samples目录下的xxl-job-executor-sample-spring项目的web文件夹】

修改web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">

	<display-name>spring-xxl-job</display-name>
	<context-param>
	    <param-name>webAppRootKey</param-name>
	    <param-value>spring-xxl-job</param-value>
	</context-param>

	<!-- spring -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:applicationContext.xml</param-value>
	</context-param>
	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
	
</web-app>

在这里插入图片描述

打包:
在这里插入图片描述
在这里插入图片描述

使用Tomcat启动spring-xxl-job项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

浏览器访问:

在这里插入图片描述

2、配置任务调度中心

①新增执行器:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②新增任务管理:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

启动任务

在这里插入图片描述
在这里插入图片描述

③查看调度日记

在这里插入图片描述
这里失败,因为在执行器设值错误了

在这里插入图片描述

执行成功日记:

在这里插入图片描述

文件日记输出:

在这里插入图片描述

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

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

相关文章

Linux 编译器 gcc/g++

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 目录 前言 正文 gcc/g常用命令 自定义可执行程序名命令-o 预处理指令-E 编译指令-S 汇编指令-c 链接指令gcc 命令巧记口诀 链接库 动态库-动态链接 静态库…

双11大型互动游戏“喵果总动员” 质量保障方案总结

推荐语&#xff1a;互动游戏是一个系统化工程&#xff0c;在笔者的“喵果总动员”质量方案中&#xff0c;可以看到为保障用户体验&#xff0c;我们在各个难点的解决方案&#xff0c; 例如&#xff1a;用线上压测能力支持业务及时调整各服务容量、通过强化学习覆盖游戏行业的测试…

设计师一定要知道这几个网站,解决你80%的设计素材。

本期推荐一波设计师必备的设计素材网站&#xff0c;设计党赶紧马住&#xff01;能解决你日常设计中80%的素材。 1、菜鸟图库 菜鸟图库-免费设计素材下载 这是一个为新手设计师提供免费素材的设计网站&#xff0c;站内有超多平面模板、海报、UI设计、电商设计等相关素材&#x…

数据与C(浮点数)

目录 一.基本概念 二.声明和初始化 三.浮点数上溢和下溢 浮点数在数据类型上一共就两个&#xff0c;一个是float&#xff0c;另一个是double。但两个唯一的区别就在于double精度方面是float的两倍 一.基本概念 首先介绍浮点数的三种书写形式 第一种 数字 &#xff1a;103…

K近邻算法和KD树详细介绍及其原理详解

相关文章 K近邻算法和KD树详细介绍及其原理详解 文章目录相关文章前言一、K近邻算法二、KD树总结前言 K近邻算法一般是我们学习机器学习的入门算法&#xff0c;本篇文章详细介绍了K近邻算法&#xff0c;并对其原理进行了说明。同时&#xff0c;为了优化K近邻算法查找最近K个邻…

Spring工厂模式

解决方案1:工厂模式 可以使用抽象工厂模式&#xff0c;让StudentDao、StudentService的实现在在工厂中生成&#xff0c;而工厂可以根据配置 文件的指定类型来创建不同的对象&#xff0c;而且工厂本身一般是不变的。从而降低了对可以变的业务逻辑类的 依赖&#xff0c;接近的软…

字节青训前端笔记 | 数据可视化基础

本课程主要内容可以分为三个章节&#xff1a; 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”&#xff0c;按照手册所列内容&#xff0c;结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…

推荐5款干净又实用的软件

我们在使用电脑的时候&#xff0c;总是会用到一些好用的软件&#xff0c;今天分享这5款干净又实用的软件&#xff0c;实在是太好用了&#xff0c;我不允许你不知道。 1.桌面工具——火柴 火柴是一款集快速搜索&#xff0c;程序启动、本地文件查找、网站直达、网络搜索等多种功…

OSACN-Net:使用深度学习和Gabor心电图信号谱图进行睡眠呼吸暂停分类

这篇文章在之前读过一次&#xff0c;其主要的思路就是利用Gabor变换&#xff0c;将心电信号转变为光谱图进行识别研究&#xff0c;总体来讲&#xff0c;不同于其他的利用心电信号分类的算法&#xff0c;该论文将心电信号转换为光谱图&#xff0c;在此基础上&#xff0c;分类问题…

java面试题(二十)中间件redis

1.1 Redis可以用来做什么&#xff1f; 参考答案 Redis最常用来做缓存&#xff0c;是实现分布式缓存的首先中间件&#xff1b;Redis可以作为数据库&#xff0c;实现诸如点赞、关注、排行等对性能要求极高的互联网需求&#xff1b;Redis可以作为计算工具&#xff0c;能用很小的…

基于微信小程序 java高校后勤报修系统 Springboot校园报修管理系统

1绪论 5 1.1项目研究的背景 5 1.2开发意义 5 1.3项目研究内容 5 2开发技术介绍 6 2.1 B/S架构 6 2.2Java技术 6 2.3MySQL 介绍 7 2.4MySQL环境配置 7 2.5SpringBoot技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 9 3.2网站性能需求…

跟开发打了半个月后,我终于get报bug的正确姿势了

在测试人员提需求的时候&#xff0c;大家经常会看到&#xff0c;测试员和开发一言不合就上BUG。然后开发一下就炸了&#xff0c;屡试不爽&#xff0c;招招致命。 曾经看到有个段子这么写道&#xff1a; 不要对程序员说&#xff0c;你的代码有BUG。他的第一反应是&#xff1a;…

C语言学习笔记-强制类型转换

强制类型转换是通过类型转换运算来实现的。其一般形式为&#xff1a;&#xff08;类型说明符&#xff09;&#xff08;表达式&#xff09;其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型…

《Redis实战篇》六、秒杀优化

6、秒杀优化 6.0 压力测试 目的&#xff1a;测试1000个用户抢购优惠券时秒杀功能的并发性能~ ①数据库中创建1000用户 这里推荐使用开源工具&#xff1a;https://www.sqlfather.com/ &#xff0c;导入以下配置即可一键生成模拟数据 {"dbName":"hmdp",…

Java中的Set集合

Set不能存储重复元素&#xff0c;元素无序&#xff08;指的是不按照添加的顺序&#xff0c;List集合是按照添加顺序存储的&#xff09;hashSet注&#xff1a;源码底层是hashMap实现的&#xff0c;因为hashMap是双列的&#xff0c;其中键是不能重复的&#xff0c;而hashSet是单列…

使用f-string格式化构建字符串

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 字符串的格式化输出&#xff08;f-string&#xff09; print(f字符串{变量}字符串) [太阳]选择题 对于以下python代码最后输出的结果是? name "小明" print("【显示】f输出…

全新视角!带你一文读懂ChatGPT!

最了解你的人不是你的朋友&#xff0c;而是你的敌人。 ——《东邪西毒》 目录 什么是ChatGPT&#xff1f; ChatGPT为什么会突然爆红网络&#xff1f; ChatGPT能帮助我们做什么&#xff1f; 获取源码&#xff1f;私信&#xff1f;关注&#xff1f;点赞&#xff1f;收藏&…

记录--千万别让 console.log 上生产!用 Performance 和 Memory 告诉你为什么

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 很多前端都喜欢用 console.log 调试&#xff0c;先不谈调试效率怎么样&#xff0c;首先 console.log 有个致命的问题&#xff1a;会导致内存泄漏。 为什么这么说呢&#xff1f; 用 Performance 和 Mem…

【信管11.4】合同及合同管理过程(二)

合同及合同管理过程&#xff08;二&#xff09;合同管理过程不属于项目管理过程中的知识域&#xff0c;所以它也不是 PMP 中的内容。其实截止到这里&#xff0c;整个 PMP 中的相关知识你已经学完了。如果抛开我们第一大章信息化和信息管理相关的内容&#xff0c;你就可以直接去…

Spring Boot(五十九):Sa-Token-Quick-Login插件快速登录认证

1 Sa-Token-Quick-Login解决的问题 Sa-Token-Quick-Login 可以为一个系统快速的、零代码 注入一个登录页面 试想一下&#xff0c;假如我们开发了一个非常简单的小系统&#xff0c;比如说&#xff1a;服务器性能监控页面&#xff0c; 我们将它部署在服务器上&#xff0c;通过访…