Docker部署XXL-JOB分布式任務(wù)調(diào)度中心的完整指南
一.部署步驟
拉取鏡像
docker pull mysql:latest docker pull xuxueli/xxl-job-admin:2.4.0
創(chuàng)建網(wǎng)絡(luò)
docker network create my
運(yùn)行mysql命令
docker run --network my --name mysql -p 3306:3306 -v /Users/a123456/work/dockerVolumes/mysql/conf:/etc/mysql/my.cnf -v /Users/a123456/work/dockerVolumes/mysql/data:/var/lib/mysql -v /Users/a123456/work/dockerVolumes/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=shmily1314 --restart=always -d mysql
執(zhí)行SQL腳本
CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;
SET NAMES utf8mb4;
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID',
`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 '報(bào)警郵件',
`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '調(diào)度類型',
`schedule_conf` varchar(128) DEFAULT NULL COMMENT '調(diào)度配置,值含義取決于調(diào)度類型',
`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '調(diào)度過期策略',
`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '執(zhí)行器路由策略',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)',
`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞處理策略',
`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任務(wù)執(zhí)行超時(shí)時(shí)間,單位秒',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)',
`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更新時(shí)間',
`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任務(wù)ID,多個(gè)逗號(hào)分隔',
`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '調(diào)度狀態(tài):0-停止,1-運(yùn)行',
`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次調(diào)度時(shí)間',
`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次調(diào)度時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID',
`job_id` int(11) NOT NULL COMMENT '任務(wù),主鍵ID',
`executor_address` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器地址,本次執(zhí)行的地址',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)',
`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)分片參數(shù),格式如 1/2',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)',
`trigger_time` datetime DEFAULT NULL COMMENT '調(diào)度-時(shí)間',
`trigger_code` int(11) NOT NULL COMMENT '調(diào)度-結(jié)果',
`trigger_msg` text COMMENT '調(diào)度-日志',
`handle_time` datetime DEFAULT NULL COMMENT '執(zhí)行-時(shí)間',
`handle_code` int(11) NOT NULL COMMENT '執(zhí)行-狀態(tài)',
`handle_msg` text COMMENT '執(zhí)行-日志',
`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警狀態(tài):0-默認(rèn)、1-無(wú)需告警、2-告警成功、3-告警失敗',
PRIMARY KEY (`id`),
KEY `I_trigger_time` (`trigger_time`),
KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trigger_day` datetime DEFAULT NULL COMMENT '調(diào)度-時(shí)間',
`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '運(yùn)行中-日志數(shù)量',
`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '執(zhí)行成功-日志數(shù)量',
`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '執(zhí)行失敗-日志數(shù)量',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_id` int(11) NOT NULL COMMENT '任務(wù),主鍵ID',
`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE類型',
`glue_source` mediumtext COMMENT 'GLUE源代碼',
`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE備注',
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) NOT NULL,
`registry_key` varchar(255) NOT NULL,
`registry_value` varchar(255) NOT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) NOT NULL COMMENT '執(zhí)行器AppName',
`title` varchar(12) NOT NULL COMMENT '執(zhí)行器名稱',
`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '執(zhí)行器地址類型:0=自動(dòng)注冊(cè)、1=手動(dòng)錄入',
`address_list` text COMMENT '執(zhí)行器地址列表,多地址逗號(hào)分隔',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '賬號(hào)',
`password` varchar(50) NOT NULL COMMENT '密碼',
`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用戶、1-管理員',
`permission` varchar(255) DEFAULT NULL COMMENT '權(quán)限:執(zhí)行器ID列表,多個(gè)逗號(hào)分割',
PRIMARY KEY (`id`),
UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '鎖名稱',
PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例執(zhí)行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `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, '測(cè)試任務(wù)1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', '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;運(yùn)行xxl-job的docker命令
提示:鏈接數(shù)據(jù)庫(kù)要用 mysql服務(wù)名訪問,否則網(wǎng)絡(luò)不通

docker run --network my -di \ -e PARAMS="--spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \ --spring.datasource.username=root --spring.datasource.password=shmily1314" \ -p 9001:8080 \ -v /Users/a123456/work/dockerVolumes/xxl-job:/data/applogs \ --privileged=true \ --name xxl-job-admin-2.4.0 xuxueli/xxl-job-admin:2.4.0
管理界面訪問
http://localhost:9001/xxl-job-admin
用戶名admin
密碼123456

新建執(zhí)行器

新建任務(wù)
樣例配置每5秒執(zhí)行一次任務(wù)

二.應(yīng)用使用
引入xxljob依賴
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<scope>provided</scope>
</dependency>
增加xxljob配置
#xxl-job
xxl:
job:
admin:
addresses: http://localhost:9001/xxl-job-admin
executor:
appname: test01
ip:
port: 9010
logpath: xxl-job/log
logretentiondays: -1
accessToken: default_token
新建XXLJOB Config配置類
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
public class XxlJobConfig {
@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
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;
}
}新增handler處理業(yè)務(wù)類
定時(shí)任務(wù)觸發(fā)的邏輯,寫在里面
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class TaskHandler {
@XxlJob("test01Handler")
public void test01Handler() {
log.info("xxl-job, hello world.");
}
}
XXLJOB界面開啟定時(shí)任務(wù)

定時(shí)任務(wù)執(zhí)行

三.測(cè)試源碼
GitCode - 全球開發(fā)者的開源社區(qū),開源代碼托管平臺(tái)
四.xxljob配置發(fā)送預(yù)警郵件(擴(kuò)展)
開通QQ郵箱的SMTP發(fā)送郵件服務(wù),生成授權(quán)碼。 授權(quán)碼是作為spring.mail.password的值。不要寫QQ郵箱密碼,謹(jǐn)慎操作!

可以先刪除之前運(yùn)行的XXL-JOB的容器
docker rm 容器id
運(yùn)行XXL-JOB docker命令
啟動(dòng)命令添加郵件額外參數(shù)
docker run --network my -di \ -e PARAMS="--spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \ --spring.datasource.username=root --spring.datasource.password=shmily1314 spring.mail.host=smtp.qq.com --spring.mail.port=25 --spring.mail.username=xx@qq.com --spring.mail.from=xxx@qq.com --spring.mail.password=xxxx --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" \ -p 9001:8080 \ -v /Users/a123456/work/dockerVolumes/xxl-job:/data/applogs \ --privileged=true \ --name xxl-job-admin-2.4.0 xuxueli/xxl-job-admin:2.4.0
郵件預(yù)警截圖

以上就是Docker部署XXL-JOB分布式任務(wù)調(diào)度中心的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Docker部署XXL-JOB的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker基于macvlan實(shí)現(xiàn)跨主機(jī)容器通信
這篇文章主要介紹了Docker基于macvlan實(shí)現(xiàn)跨主機(jī)容器通信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
解決docker重啟redis,mysql數(shù)據(jù)丟失的問題
這篇文章主要介紹了解決docker重啟redis,mysql數(shù)據(jù)丟失的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-11-11
window-docker的容器使用宿主機(jī)音頻設(shè)備的過程詳解
這篇文章主要介紹了window-docker的容器使用宿主機(jī)音頻設(shè)備的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-05-05
docker初始化安裝時(shí)的WSL兩個(gè)問題詳解
這篇文章主要給大家介紹了關(guān)于docker初始化安裝時(shí)的WSL兩個(gè)問題,文中通過代碼以及圖文介紹的非常詳細(xì),對(duì)初學(xué)者學(xué)習(xí)Docker,非常有幫助,需要的朋友可以參考下2023-12-12
使用Dockerfile實(shí)現(xiàn)容器內(nèi)部服務(wù)隨容器自啟動(dòng)的方法
這篇文章主要介紹了使用Dockerfile實(shí)現(xiàn)容器內(nèi)部服務(wù)隨容器自啟動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
在Jenkins Docker容器中切換到root用戶并解決權(quán)限問題的完整指南
在使用Jenkins構(gòu)建和部署項(xiàng)目時(shí),可能會(huì)遇到一些操作需要root用戶權(quán)限,比如安裝軟件包、創(chuàng)建軟鏈接等,在Jenkins的Docker容器中,默認(rèn)是以非特權(quán)用戶運(yùn)行的,這意味著你可能會(huì)遇到權(quán)限不足的問題,本文將教你如何在Jenkins容器中切換到root用戶,需要的朋友可以參考下2025-08-08

