当前位置: 首页 > news >正文

分布式调度XXL-JOB - 详解

分布式调度XXL-JOB - 详解

1.概述

1.1、XXL-JOB介绍

XXL-Job:是大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

官网地址: 分布式任务调度平台XXL-JOB/

1.1.1 系统架构图

1.1.2 设计思想

将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。

将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。

因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;

2.快速入门

2.1、下载源码

2.1.1 源码下载地址:

github:https://github.com/xuxueli/xxl-job

gitee:https://gitee.com/xuxueli0323/xxl-job

2.2、初始化调度数据库

clone项目源码,获取 “调度数据库初始化SQL脚本” 并执行即可,“调度数据库初始化SQL脚本” 位置为:

/xxl-job/doc/db/tables_xxl_job.sql

2.3、maven 编译源码

解压源码,按照maven格式将源码导入IDE, 使用maven进行依赖引入即可,源码结构如下:

2.4、 配置部署调度中心

2.4.1 调度中心配置

修改xxl-job-admin项目的配置文件application.properties,把数据库账号密码配置上

### web
server.port=8088
server.servlet.context-path=/xxl-job-admin
​
### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false
​
### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
​
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
​
### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model
​
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.202.200:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=WolfCode_2017
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
​
### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000
​
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
​
### xxl-job, access token
xxl.job.accessToken=default_token
​
### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN
​
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
​
### xxl-job, log retention days
xxl.job.logretentiondays=30
2.4.2 部署项目

运行XxlJobAdminApplication程序即可.

调度中心访问地址: http://localhost:8088/xxl-job-admin

默认登录账号 “admin/123456”, 登录后运行界面如下图所示。

至此“调度中心”项目已经部署成功。

2.5 配置部署执行器项目

2.5.1 添加Maven依赖

创建SpringBoot项目集成xxl-job并且添加如下依赖:

                org.springframework.boot               spring-boot-dependencies               2.4.2               pom               import
​           org.projectlombok           lombok           org.mapstruct           mapstruct           1.4.2.Final           org.mapstruct           mapstruct-processor           1.4.2.Final           org.springframework.boot           spring-boot-starter-log4j2           2.4.2           com.alibaba           fastjson           1.2.24           com.google.guava           guava           19.0           org.apache.commons           commons-lang3           3.11
​           org.springframework.boot           spring-boot-starter-data-redis                   logback-classic                   ch.qos.logback                   spring-boot-starter-logging                   org.springframework.boot
​           com.fasterxml.jackson.core           jackson-databind
​           org.springframework.boot           spring-boot-starter-web
​           mysql           mysql-connector-java
​           org.springframework.boot           spring-boot-starter-jdbc           com.alibaba           druid-spring-boot-starter           1.2.15
​           org.mybatis.spring.boot           mybatis-spring-boot-starter           2.2.2           com.baomidou           mybatis-plus-boot-starter           3.5.1           com.xuxueli           xxl-job-core           2.3.1

2.5.2 执行器配置

在配置yaml文件中添加如下配置:

xxl:job:   admin:     ### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;     addresses: http://127.0.0.1:8088/xxl-job-admin     ### 执行器通讯TOKEN [选填]:非空时启用;   accessToke: default_token   executor:     ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册     appname: xxl-job-executor-sample     ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";     ip: 127.0.0.1     ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;     port: 9999     ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;     logpath: /data/applogs/xxl-job/jobhandler     ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;     logretentiondays: 30

2.5.3 添加执行器配置

创建XxlJobConfig配置对象:

@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.address}")   private String address;   @Value("${xxl.job.executor.ip}")   private String ip;   @Value("${xxl.job.executor.port}")   private int port;   @Value("${xxl.job.executor.logpath}")   private String logPath;   @Value("${xxl.job.executor.logretentiondays}")   private int logRetentionDays;
​   @Bean   public XxlJobSpringExecutor xxlJobExecutor() {       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;   }
}
2.5.4 添加任务处理类

添加任务处理类,交给Spring容器管理,在处理方法上贴上@XxlJob注解Demo

@Component
public class XxlJobController {   @XxlJob("demoXXjob")   public void demoXXjob() throws Exception {       System.out.println("执行定时任务,执行时间:"+new Date()+"Hello xxl-job");   }
}

2.5.5 实战代码
@Component
public class XxlJobController {   //自建表做查询,省略建表与查询业务   @Resource   private SubjectCategoryService subjectCategoryService;
​   @XxlJob("selectEamInfo")   public void selectEamInfo() throws Exception {       Result> listResult = subjectCategoryService.searchInfo();       listResult.getData().forEach(result->{           System.out.println(result);       });       System.out.println("执行定时任务,执行时间:"+new Date());   }
}

2.6 运行程序

2.6.1 任务配置&触发执行

登录调度中心,在任务管理中新增任务,配置内容如下:

新增后界面如下:

接着启动定时调度任务

2.6.2 查看日志

在调度中心的调度日志中就可以看到,任务的执行结果.

管控台也可以看到任务的执行信息.

2.6.3、实战效果如下

配置xxljob表达式:

执行一次验证

日志查看

后台查看

即xxl_job集成springboot项目成功。

http://www.sczhlp.com/news/13185/

相关文章:

  • 碎碎念(十二)
  • 25-暑期-来追梦noip-卷2
  • day13_MVC_前后端分离
  • day15_mybatis2
  • day14_mybatis1
  • 题解:AT_agc032_f [AGC032F] One Third
  • 数论专题-扩展欧几里得算法
  • codesys 当自己的库 操作 将工程另存为编译库报警:这个库的文件输出部分不可用,可装库文档支持包 方便别人,方便自己!
  • 服务器部署notebook+xedu+机器学习编程环境多用户登录
  • neovim初探
  • Ubunutu终端配置
  • 数论专题-裴蜀定理
  • Proto实践
  • 【大二病也要学离散!】第六章 欧拉图与哈密顿图
  • 动态dp总结
  • Script-Server 脚本Web化管理工具​​ - Leonardo
  • 题解:[CSP-S2019] Emiya 家今天的饭
  • ESP32-S3 控制 SD卡
  • ESP32-S3 控制 WIFI
  • ESP32-S3 控制 红外遥控
  • ESP32-S3 控制 舵机
  • 代码随想录算法训练营第八天(字符串篇)|Leetcode151翻转字符串中的单词,卡码网右旋转字符串,Leetcode28实现Strstr(),Leetcode459重复的子字符串
  • 数论专题-欧拉定理与费马小定理
  • ESP32-S3 控制 OLED液晶显示
  • Arduino PWM 引与 Atmega 引脚对应关系
  • ESP32-S3 控制 超声波测距
  • 无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测协议
  • 电脑win10-菜单栏-搜索栏-鼠标一放入输入框中或者点进二级菜单中就会反复失效-bldbaseservice
  • ESP32-S3 控制 DHT11温湿度传感器
  • ESP32-S3 控制 RTC实时时钟