文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

XXL-JOB详解(整合springboot)保姆级教程

2023-09-11 09:38

关注

文章目录

有兴趣的小伙伴可以去看一下他的官网:分布式任务调度平台XXL-JOB (xuxueli.com)

在这里插入图片描述

XXL-JOB是什么

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

为什么要叫 XXL 呢?答:是因为他的作者的名字叫许雪里,使用了名字的缩写

分布式任务调度平台是什么呢?答:一个定时任务实现方案

在平时的业务场景中,经常有一些场景需要使用定时任务,比如:

时间驱动的场景:某个时间点发送优惠券,发送短信等等。批量处理数据:批量统计上个月的账单,统计上个月销售数据等等。固定频率的场景:每隔5分钟需要执行一次。所以定时任务在平时开发中并不少见,而且对于现在快速消费的时代,每天都需要发送各种推送,消息都需要依赖定时任务去完成,

为什么需要任务调度平台,而不用传统的 Timer 与 Quartz

在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题:

显然传统的定时任务已经不满足现在的分布式架构,所以需要一个分布式任务调度平台,目前比较主流的是elasticjob和xxl-job。

为什么选择XXL-JOB,不选择elasticjob

跟xxl-job不同的是,elasticjob是采用zookeeper实现分布式协调,实现任务高可用以及分片。

相对来说,xxl-job中心式的调度平台轻量级,开箱即用,操作简易,上手快,与SpringBoot有非常好的集成,而且监控界面就集成在调度中心,界面又简洁,对于企业维护起来成本不高,还有失败的邮件告警等等。这就使很多企业选择xxl-job做调度平台。

我先讲一下xxl-job的运行原理(我自己的理解):xxl-job是一个网页,用来处理注册在里面的请求,并每过多长的时间(自己设置)就会传递一个值给springboot,这样就会出现一个问题:xxl-job要在局域网下才能连接成功。

向下面的docker安装方法,就是典型的例子,本地的服务(springboot)是连接不上服务器端的

为什么?:很简单个理由就是,在同一个网段下(本地),xxl-job可以给本地服务(springboot)发送服务;但如果xxl-job是在服务器上,那么你能跟他通信,但他不能给你通信,意思就是他ping你的ip是ping不通的

解决方法1:先在本地做测试的环境,服务器上的也做一样的配置,本地把服务(springboot)打包后,上传服务器,那么两个服务器直接就可以建立联系,或者上传到同一服务器上,组成服务器的本地环境

解决方法2:进入服务器上的xxl-job访问不了本地的,是因为本地不能被外网访问,那么就用内网穿透工具,让外网服务器可以访问本地端口就行

在这里我讲两种安装方式:

一、源码编译(Windows)

1、拉取源码:xxl-job: 一个分布式任务调度平台

2、导入IDEA,查看一下目录

在这里插入图片描述

3、初始化数据库,配置数据库连接信息(在本地导入上图中的sql文件,并把配置文件给改好)

在这里插入图片描述

在这里插入图片描述

4.1、编译运行

访问http://localhost:8080/xxl-job-admin/toLogin

进入管理页面。默认账号/密码:admin/123456。

在这里插入图片描述

4.2、jar包运行(这样就可以直接部署到Linux服务器上了)

不知道怎么做的朋友可以看(两者选其一看就行,第二种方法比较小白,我相信学到xxl-job的朋友这些都可以了解过,如果忘记了,看第一篇就好了):

使用Linux命令行发布springboot、javaWeb项目_我认不到你的博客-CSDN博客_linux springboot jar 发布

宝塔搭建SSM(Web项目也一样)和Springboot项目,超详细图解_我认不到你的博客-CSDN博客_宝塔怎么部署ssm redis项目

在配置好mysql的情况下,打成jar包,使用java -jar jar包名字运行。

(1)打包

在这里插入图片描述

(2)在xxl-job-admin打开jar包目录

在这里插入图片描述

(3)打开cmd,使用java -jar xxl-job-admin-2.4.0-SNAPSHOT.jar命令

在这里插入图片描述

(4)访问http://localhost:8080/xxl-job-admin/toLogin

在这里插入图片描述

二、Docker安装(Linux)

不知道怎么安装docker的小伙伴可以看看这篇:Linux(CentOS 7)安装Docker和Docker Compose,并配置docker镜像_我认不到你的博客-CSDN博客

1、初始化数据库(把数据库安装到Linux服务器)(当然你有更好的方式最好,比如我觉得宝塔就非常的快,但这里我就带大家再熟悉一下mysql的知识点)

(1)、上传sql文件到linux服务器中(使用工具:宝塔面板、filezilla、Xftp都可以)

(2)、在mysql中创建xxl-job的表

# 一、登录# 登录mysql方式1  -p 后面不要有空格!!!!!!!!!!!!!!!!!!!!mysql -u用户名 -p密码# 登录mysql方式2 mysql -u用户名 -p # 回车后填写密码# 二、创建字符集为 utf8mb4 的数据表 别忘了 ; !!!!!!!!!!!!!!!!!!!!!CREATE DATABASE `xxl_job` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# 三、查看表SHOW DATABASES;# 成功案例# mysql> CREATE DATABASE `xxl-job` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# Query OK, 1 row affected (0.04 sec)# # mysql> SHOW DATABASES;# +--------------------+# | Database           |# +--------------------+# | information_schema |# | mysql              |# | performance_schema |# | sql120_48_77_24    |# | sys                |# | xxl-job            |# +--------------------+# 6 rows in set (0.00 sec)# 四、把sql导入# 1、进入指定数据库use xxl-job;# 2、选中导入路径 source /路径/tables_xxl_job.sql; source /www/wwwroot/tables_xxl_job.sql;# 3、查看是否导入成功show tables;#成功案例# mysql> show tables;# +--------------------+# | Tables_in_xxl_job  |# +--------------------+# | xxl_job_group      |# | xxl_job_info       |# | xxl_job_lock       |# | xxl_job_log        |# | xxl_job_log_report |# | xxl_job_logglue    |# | xxl_job_registry   |# | xxl_job_user       |# +--------------------+# 8 rows in set (0.00 sec)# 五、退出 mysql 编辑:键盘的 Ctrl+DCtrl+D

(3)、mysql创建新用户并授权,开放权限允许其他ip访问(因为docker容器与宿主机是分开的,所有相当于是用外网连接的mysql)

方法一:把root用户放开给所有人使用,不推荐,不安全
mysql> show databases;mysql> use mysql;mysql> update user set host = '%'  where user = 'root';mysql> select hosh,user from user;mysql> exit
方法二:创建新用户并授权

① 创建用户:CREATE USER 'xxl'@'%' IDENTIFIED BY '123456';

# 创建用户mysql> CREATE USER 'username'@'host' IDENTIFIED BY 'password';# 例子 dog 用户供所有人访问mysql> CREATE USER 'xxl'@'%' IDENTIFIED BY '123456';

说明: username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

② 授权:GRANT ALL ON xxl_job.* TO 'xxl'@'%';

# 授权mysql> GRANT privileges ON databasename.tablename TO 'username'@'host' # 例子mysql> GRANT SELECT, INSERT ON test.user TO 'pig'@'%';mysql> GRANT ALL ON *.* TO 'pig'@'%';

说明: privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名 tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*

③ 完成用户的创建后,请记得刷新系统权限表;

mysql> flush privileges;

2、docker启动xxl-job

(1)、拉取镜像(可以跳过,因为直接run的话也可以拉取镜像)

docker pull xuxueli/xxl-job-admin:2.3.0

(2)、执行命令

docker run -d --name xxl-job-admin -p 4090:8080 \-e PARAMS="\--spring.datasource.url=jdbc:mysql://ip地址:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai \--spring.datasource.username=xxl \--spring.datasource.password=123456" \-v /usr/local/xxl-job/admin/logs:/data/applogs \--privileged=true \--name xxl-job \xuxueli/xxl-job-admin:2.3.0

(3)、查看docker运行状态

[root@instance-yusr6p10 ~]# docker psCONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS            NAMESae7a23e761d9   xuxueli/xxl-job-admin:2.3.0   "sh -c 'java -jar $J…"   About a minute ago   Up About a minute   0.0.0.0:4090->8080/tcp, :::4090->8080/tcp   xxl-job-admin

(4)、开放4090端口,记得开放mysql的3306端口哦

方法一:
#  关闭防火墙;不推荐systemctl top firewalld
方法二:

命令含义:

–zone #作用域

–add-port=1935/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

# 1、开启防火墙systemctl start firewalld# 2、开放指定端口(比如4090端口)firewall-cmd --zone=public --add-port=4090/tcp --permanent# 3、重启防火墙firewall-cmd --reload# 4、查看端口号netstat -ntlp   #查看当前所有tcp端口·netstat -ntulp |grep 1935   #查看所有1935端口使用情况·
方法三:推荐
# 开放4090端口 /sbin/iptables -I INPUT -p tcp --dport 4090 -j ACCEPT# 禁用端口/sbin/iptables -I INPUT -p tcp --dport [port] -j DROP# 指定ip开放端口/sbin/iptables -I INPUT -h [ip] -p tcp --dport [port] -j ACCEPT# 指定ip禁用端口/sbin/iptables -I INPUT -h [ip] -p tcp --dport [port] -j DROP# 查看现有设置/sbin/iptables -L# 清除现有设置/sbin/iptables -F
方法四:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4090 -j ACCEPT service iptables restart

(5)、访问 http://ip地址:4090/xxl-job-admin

在这里插入图片描述

PS:如果要修改 XXL-JOB 账号密码的话,可以先在右上角点击修改密码(因为密码是加密的,直接改数据库话,要按照他的规格来整理,很麻烦),账号的话就在数据库里面修改就好了

在这里插入图片描述

SpringBoot配置:

一、导入maven依赖

                <dependency>            <groupId>com.xuxueligroupId>            <artifactId>xxl-job-coreartifactId>            <version>2.3.1version>        dependency>

二、配置yaml

xxl:  job:    admin:      addresses: http://localhost:8080/xxl-job-admin    accessToken:    executor:      appname: zpa-job      #ip: 10.123.1.53      port: 9999      # 日志地址      logpath: /data/applogs/xxl-job/jobhandler      # 日志保存时间      logretentiondays: 30

三、XxlJobConfig配置类

@Configuration@Slf4jpublic class XxlJobConfig {     @Value("${xxl.job.admin.addresses}")    private String adminAddresses;     @Value("${xxl.job.executor.appname}")    private String appName;          @Value("${xxl.job.executor.port}")    private int port;     @Value("${xxl.job.accessToken}")    private String accessToken;     @Value("${xxl.job.executor.logpath}")    private String logPath;     @Value("${xxl.job.executor.logretentiondays}")    private int logRetentionDays;      @Bean(initMethod = "start", destroyMethod = "destroy")    public XxlJobSpringExecutor xxlJobExecutor() {        log.info(">>>>>>>>>>> xxl-job config init.");        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);        xxlJobSpringExecutor.setAppName(appName);        //xxlJobSpringExecutor.setIp(ip);        xxlJobSpringExecutor.setPort(port);        xxlJobSpringExecutor.setAccessToken(accessToken);        xxlJobSpringExecutor.setLogPath(logPath);        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);         return xxlJobSpringExecutor;    } }

四、Demo.java

@Componentpublic class XxlDemoHandler {    @XxlJob("Demo")    public ReturnT<String> demo(){        String param = XxlJobHelper.getJobParam();        XxlJobHelper.log("测试开始");        System.out.println();        System.out.println();        System.out.println();        System.out.println(param);        System.out.println("测试完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!");        System.out.println();        System.out.println();        System.out.println();        XxlJobHelper.log("测试开结束");        return ReturnT.SUCCESS;    }}

XXL-JOB配置(与上文的yaml文件结合着看)

一、看一下自己的 IPV4 地址:cmd中使用ipconfig

在这里插入图片描述

二、配置执行器

在这里插入图片描述

三、配置任务管理(配合Demo.java看)Cron表达式我放最后了

在这里插入图片描述

四、测试

在这里插入图片描述

在这里插入图片描述

五、查看运行结果

springboot:

在这里插入图片描述

xxl-job:

在这里插入图片描述

在这里插入图片描述

Cron学习:

Cron表达式简单学习

3千字带你搞懂XXL-JOB任务调度平台 (baidu.com)

Failed to restart iptables.service: Unit not found.

分布式调度平台启动报错:com.xxl.rpc.util.XxlRpcException: xxl-rpc request data empty. - 灰信网(软件开发博客聚合) (freesion.com)

来源地址:https://blog.csdn.net/qq_57581439/article/details/128319069

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯