目录导航

  • 一、xxl-job安装部署
  • 二、openapi配置
  • 三、BEAN模式开发
  • 四、操作指南
  • 五、xxl-job实现高可用
  • 六、xxl-job高可用测试

一、xxl-job安装部署

1.数据库创建脚本

CREATE database if NOT EXISTS `xxl_job` default character set utf8 collate utf8_general_ci;
use `xxl_job`;CREATE TABLE `xxl_job_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',`job_desc` varchar(255) NOT NULL,`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`author` varchar(64) DEFAULT NULL COMMENT '作者',`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',`glue_source` mediumtext COMMENT 'GLUE源代码',`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `xxl_job_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',`trigger_code` int(11) NOT NULL COMMENT '调度-结果',`trigger_msg` text COMMENT '调度-日志',`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',`handle_code` int(11) NOT NULL COMMENT '执行-状态',`handle_msg` text COMMENT '执行-日志',`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',PRIMARY KEY (`id`),KEY `I_trigger_time` (`trigger_time`),KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `xxl_job_logglue` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',`glue_source` mediumtext COMMENT 'GLUE源代码',`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',`add_time` timestamp NULL DEFAULT NULL,`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `xxl_job_registry` (`id` int(11) NOT NULL AUTO_INCREMENT,`registry_group` varchar(255) NOT NULL,`registry_key` varchar(255) NOT NULL,`registry_value` varchar(255) NOT NULL,`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`),KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `xxl_job_group` (`id` int(11) NOT NULL AUTO_INCREMENT,`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',`title` varchar(12) NOT NULL COMMENT '执行器名称',`order` int(11) NOT NULL DEFAULT '0' COMMENT '排序',`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',`address_list` varchar(512) DEFAULT NULL COMMENT '执行器地址列表,多地址逗号分隔',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `xxl_job_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL COMMENT '账号',`password` varchar(50) NOT NULL COMMENT '密码',`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',PRIMARY KEY (`id`),UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `xxl_job_lock` (`lock_name` varchar(50) NOT NULL COMMENT '锁名称',PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `order`, `address_type`, `address_list`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 1, 0, NULL);
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_cron`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '0 0 0 * * ? *', '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');commit;

2.Docker 镜像方式搭建调度中心

  • 下载镜像
// Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/     (建议指定版本号)
docker pull xuxueli/xxl-job-admin:2.1.0

创建容器并运行

/**
* 如需自定义 mysql 等配置,可通过 "PARAMS" 指定,参数格式 RAMS="--key=value  --key2=value2" ;
* 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
*/docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://10.100.58.220:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=root --spring.datasource.password=bys2018" \
-p 8080:8080 \
-v /tmp:/data/applogs \
--name xxl-job-admin  -d xuxueli/xxl-job-admin:2.1.0

-- 备注:本机调试数据库ip不能写127.0.0.1

3.登录地址

  • url:http://localhost:8080/xxl-job-admin
  • user:admin
  • password:123456

二、openapi配置

1.maven引入

<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.1.0</version>
</dependency>

2.yml配置

# xxl-job配置
xxl:job:### 执行器通讯TOKEN [选填]:非空时启用;accessToken: ''admin:### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://127.0.0.1:8080/xxl-job-admin}executor:### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册appname: my-saasip: ''logpath: my-saaslogretentiondays: -1port: 9907

3.新增config

package com.bys.rdc.saas.config;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;/*** xxl-job config** @author xuxueli 2017-04-28*/
@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.executor.appname}")private String appName;@Value("${xxl.job.executor.ip}")private String ip;@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() {logger.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;}
}

三、BEAN模式开发

1.BEAN模式
BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 "JobHandler" 属性匹配执行器中任务;
2.Openapi中,开发JobHandler:

 - 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;- 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;- 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。- 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;

四、操作指南

操作指南

五、xxl-job实现高可用

1、如果xxl-job-Admin平台如果宕机了,该如何处理?
需要搭建集群。
2、xxl-job-Admin 如何搭建集群?
使用Nginx搭建集群进行处理。
3、如何避免job被执行2次?
使用Ngix搭建集群,效果类似于 一主一备的效果。
处理业务操作使用Nginx实现负载均衡,在所有的调度中心集群中,最终只能有一台服务器进行调度(主、备)。
调度中心宕机流程图:

六、xxl-job高可用测试

1、xxl-job-Admin集群搭建
本地搭建集群,启动两个Admin实例,端口分别映射8080和8081,连接同一个数据库,登录帐号使用同一个。

DB配置保持一致;
登陆账号配置保持一致;
集群机器时钟保持一致(单机集群忽视);
建议:推荐通过nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回调配置、调用API服务等操作均通过该域名进行。

2.执行器集群配置
单机集群,一个服务端口9907,一个服务端口9908

# xxl-job配置-9907
xxl:job:### 执行器通讯TOKEN [选填]:非空时启用;accessToken: ''admin:### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://127.0.0.1:8080/xxl-job-admin,http://127.0.0.1:8081/xxl-job-admin}executor:### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册appname: my-saasip: ''logpath: my-saaslogretentiondays: -1### 一个配置9907,一个配置9908port: 9907
# xxl-job配置-9908
xxl:job:### 执行器通讯TOKEN [选填]:非空时启用;accessToken: ''admin:### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;addresses: ${XXL_JOB_ADMIN_ADDRESSES:http://127.0.0.1:8080/xxl-job-admin,http://127.0.0.1:8081/xxl-job-admin}executor:### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册appname: my-saasip: ''logpath: my-saaslogretentiondays: -1### 一个配置9907,一个配置9908port: 9908

3.在admin管理界面注册执行器

4.在任务管理器添加任务

5.采用轮询机制执行任务,一次一个任务只分配到一个执行器上

6.停掉8081的admin,执行器任务依旧能够执行

分布式任务调度平台之 xxl-job配置部署相关推荐

  1. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...

    SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...

  2. 分布式任务调度平台XXL-JOB安装部署

    分布式任务调度平台XXL-JOB相关教程: 使用教程 分布式任务调度平台XXL-JOB使用教程_foxofwind的博客-CSDN博客分布式任务调度平台XXL-JOB使用教程https://blog. ...

  3. java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri 引言 HelloGitHub 推出的<讲解开源项目>[1]系列. 项目地址: https://githu ...

  4. xxl子任务_XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新

    v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为"NETTY_HTTP"方案,执行器内嵌n ...

  5. xxl子任务_XXL-JOB v2.1.2 发布,分布式任务调度平台

    v2.1.2 Release Notes 1.方法任务支持:由原来基于JobHandler类任务开发方式,优化为支持基于方法的任务开发方式:因此,可以支持单个类中开发多个任务方法,进行类复用 @Xxl ...

  6. 分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案

    分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 参考文章: (1)分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 (2)https://www.cnblogs.co ...

  7. python任务调度平台 界面_分布式任务调度平台XXL-JOB

    以前带我的人说过,最好的学习就是看官方文档,个人也有4个T的学习视频,但是会发现讲的都是入门,有的也比较浅. 官方文档比较官方,也比较权威,打开xxl-job的官网,写的贼详细,有些人喜欢收博客,不喜 ...

  8. 轻量级分布式任务调度平台 XXL-JOB

    From:https://www.cnblogs.com/xuxueli/p/5021979.html github 地址 及 中文文档地址:https://github.com/xuxueli/xx ...

  9. 分布式任务调度平台一站式讲解

    文章目录 一.传统的定时任务 1. 传统的定时任务存在那些缺点 2. 定时任务集群幂等性问题 二.传统定时任务的实现方案 2.1. 多线程 2.2. TimeTask 2.3. 线程池 2.4. Sp ...

  10. python任务调度平台 界面_分布式任务调度平台XXL-JOB搭建教程

    关于分布式任务调度平台XXL-JOB,其实作者 许雪里在其发布的中文教程中已经介绍的很清楚了,这里我就不做过多的介绍了,关于其搭建教程,本人依照其文档搭建起来基本上也没遇到啥问题,这里通过博客的形式记 ...

最新文章

  1. 如何获取HTML元素对应JavaScript对象?
  2. ie和firefox操作table对象的异同
  3. MultiRow发现之旅(二)- 详解属性管理器
  4. 收录批量查询神器 bluecattools
  5. xml xsd java
  6. 抽象工厂模式(通俗易懂)
  7. uipath sequence传递参数_湛江压铸模温机工作原理参数图
  8. ANS.1编码详解(一)----基础语法和数据类型
  9. 因果森林总结:基于树模型的异质因果效应估计
  10. word中如何将所有一级标题统一格式(转载)
  11. 人类简史 - ZhiMap思维导图 (转载)
  12. C语言中getchar()函数的详解
  13. React 高阶组件(HOC)
  14. Win8安装STEP7提示pniopcac.exe错误
  15. 计算机一级基本操作题创建快捷方式,计算机一级MSOffice操作题练习附答案
  16. 学考计算机上sci怎么消,已接收的SCI稿件,想要去掉一个作者,怎么和编..._网络编辑_帮考网...
  17. 高压开关柜/环网箱局放在线监测设备(局部放电在线监测装置设备)的分类与选型
  18. 如何不问冒昧的问妹子年龄又能清楚的知道她多大呢?Python来告诉你。
  19. .net 非静态的字段、方法或属性 要求对象引用
  20. 想找人帮公司开发一个ERP系统

热门文章

  1. MIT 6.824学习-GFS
  2. 数据库(外键及其约束理解)
  3. python实现微信机器人群发软件_Python自制微信机器人:群发消息、自动接收好友...
  4. 什么是Shmoo图和Shmoo测试
  5. vue 祖孙组件通信, 祖组件获取孙组件数据
  6. java 对比函数_java中字符串比较函数和操作函数,详细解析
  7. 2022艾灸展,艾健康展,艾棒展,山东艾制品展,艾绒纺织展
  8. 频繁模式挖掘——概述
  9. CF1475F Unusual Matrix
  10. ffmpeg录屏命令