2.1 初始化 “ 调度数据库 “
请下载项目源码并解压,获取 “ 调度数据库初始化 SQL 脚本 “ 并执行即可。
“ 调度数据库初始化 SQL 脚本 “ 位置为:
1 2 3 4 5
|
1. `/xxl-job/doc/db/tables_xxl_job.sql`
|
调度中心支持集群部署,集群情况下各节点务必连接同一个 mysql 实例;
如果 mysql 做主从, 调度中心集群节点务必强制走主库;
2.2 编译源码
解压源码, 按照 maven 格式将源码导入 IDE, 使用 maven 进行编译即可,源码结构如下:
1 2 3 4 5 6 7 8 9
|
1. `xxl-job-admin:调度中心 ` 2. `xxl-job-core:公共依赖 ` 3. `xxl-job-executor-samples:执行器 Sample 示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)` 4. `:xxl-job-executor-sample-springboot:Springboot 版本,通过 Springboot 管理执行器,推荐这种方式;` 5. `:xxl-job-executor-sample-frameless:无框架版本;`
|
2.3 配置部署 “ 调度中心 “
1 2 3 4 5 6
|
1. ` 调度中心项目:xxl-job-admin` 2. ` 作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。`
|
步骤一:调度中心配置
调度中心配置文件地址:
1 2 3 4 5
|
1. `/xxl-job/xxl-job-admin/src/main/resources/application.properties`
|
调度中心配置内容说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
1. `### 调度中心 JDBC 链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致 ` 2. `spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai` 3. `spring.datasource.username=root` 4. `spring.datasource.password=root_pwd` 5. `spring.datasource.driver-class-name=com.mysql.jdbc.Driver`
7. `### 报警邮箱 ` 8. `spring.mail.host=smtp.qq.com` 9. `spring.mail.port=25` 10. `spring.mail.username=xxx@qq.com` 11. `spring.mail.password=xxx` 12. `spring.mail.properties.mail.smtp.auth=true` 13. `spring.mail.properties.mail.smtp.starttls.enable=true` 14. `spring.mail.properties.mail.smtp.starttls.required=true` 15. `spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory`
17. `### 调度中心通讯 TOKEN [选填]:非空时启用;` 18. `xxl.job.accessToken=`
20. `### 调度中心国际化配置 [必填]: 默认为 "zh_CN"/ 中文简体, 可选范围为 "zh_CN"/ 中文简体, "zh_TC"/ 中文繁体 and "en"/ 英文;` 21. `xxl.job.i18n=zh_CN`
23. `## 调度线程池最大线程配置【必填】` 24. `xxl.job.triggerpool.fast.max=200` 25. `xxl.job.triggerpool.slow.max=100`
27. `### 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于 7 时生效,否则, 如 -1,关闭自动清理功能;` 28. `xxl.job.logretentiondays=30`
|
步骤二:部署项目
如果已经正确进行上述配置,可将项目编译打包部署。
调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)
默认登录账号 “admin/123456”, 登录后运行界面如下图所示。
至此 “ 调度中心 “ 项目已经部署成功。
步骤三:调度中心集群(可选)
调度中心支持集群部署,提升调度系统容灾和可用性。
调度中心集群部署时,几点要求和建议:
- DB 配置保持一致;
- 集群机器时钟保持一致(单机集群忽视);
- 建议:推荐通过 nginx 为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回调配置、调用 API 服务等操作均通过该域名进行。
其他:Docker 镜像方式搭建调度中心
1 2 3 4 5 6
|
1. `// Docker 地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/ (建议指定版本号)` 2. `docker pull xuxueli/xxl-job-admin`
|
1 2 3 4 5 6 7 8 9 10
|
1. `/**` 2. `* 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value --key2=value2" ;` 3. `* 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties` 4. `* 如需自定义 JVM 内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;` 5. `*/` 6. `docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:{ 指定版本 }`
|
2.4 配置部署 “ 执行器项目 “
1 2 3 4 5 6
|
1. `“执行器”项目:xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)` 2. ` 作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。`
|
步骤一:maven 依赖
确认 pom 文件中引入了 “xxl-job-core” 的 maven 依赖;
步骤二:执行器配置
执行器配置,配置文件地址:
1 2 3 4 5
|
1. `/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties`
|
执行器配置,配置内容说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
1. `### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行 " 执行器心跳注册 " 和" 任务结果回调 ";为空则关闭自动注册;` 2. `xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin`
4. `### 执行器通讯 TOKEN [选填]:非空时启用;` 5. `xxl.job.accessToken=`
7. `### 执行器 AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册 ` 8. `xxl.job.executor.appname=xxl-job-executor-sample` 9. `### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态 IP 和动态映射端口问题。` 10. `xxl.job.executor.address=` 11. `### 执行器 IP [选填]:默认为空表示自动获取 IP,多网卡时可手动设置指定 IP,该 IP 不会绑定 Host 仅作为通讯实用;地址信息用于 " 执行器注册 " 和 " 调度中心请求并触发任务 ";` 12. `xxl.job.executor.ip=` 13. `### 执行器端口号 [选填]:小于等于 0 则自动获取;默认端口为 9999,单机部署多个执行器时,注意要配置不同执行器端口;` 14. `xxl.job.executor.port=9999` 15. `### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;` 16. `xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler` 17. `### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3 时生效 18. `xxl.job.executor.logretentiondays=30`
|
步骤三:执行器组件配置
执行器组件,配置文件地址:
1 2 3 4 5
|
1. `/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java`
|
执行器组件,配置内容说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
1. `@Bean` 2. `public XxlJobSpringExecutor xxlJobExecutor() {` 3. `logger.info(">>>>>>>>>>> xxl-job config init.");` 4. `XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();` 5. `xxlJobSpringExecutor.setAdminAddresses(adminAddresses);` 6. `xxlJobSpringExecutor.setAppname(appname);` 7. `xxlJobSpringExecutor.setIp(ip);` 8. `xxlJobSpringExecutor.setPort(port);` 9. `xxlJobSpringExecutor.setAccessToken(accessToken);` 10. `xxlJobSpringExecutor.setLogPath(logPath);` 11. `xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);`
13. `return xxlJobSpringExecutor;` 14. `}`
|
步骤四:部署执行器项目
如果已经正确进行上述配置,可将执行器项目编译打部署,系统提供多种执行器 Sample 示例项目,选择其中一个即可,各自的部署方式如下。
1 2 3 4 5 6
|
1. `xxl-job-executor-sample-springboot:项目编译打包成 springboot 类型的可执行 JAR 包,命令启动即可;` 2. `xxl-job-executor-sample-frameless:项目编译打包成 JAR 包,命令启动即可;`
|
至此 “ 执行器 “ 项目已经部署结束。
步骤五:执行器集群(可选)
执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。
执行器集群部署时,几点要求和建议:
- 执行器回调地址(xxl.job.admin.addresses)需要保持一致;执行器根据该配置进行执行器自动注册等操作。
- 同一个执行器集群内 AppName(xxl.job.executor.appname)需要保持一致;调度中心根据该配置动态发现不同集群的在线执行器列表。
2.5 开发第一个任务 “Hello World”
本示例以新建一个 “GLUE 模式 (Java)” 运行模式的任务为例。更多有关任务的详细配置,请查看 “ 章节三:任务详解 “。
(”GLUE 模式 (Java)” 的执行代码托管到调度中心在线维护,相比 “Bean 模式任务 “ 需要在执行器项目开发部署上线,更加简便轻量)
前提:请确认 “ 调度中心 “ 和 “ 执行器 “ 项目已经成功部署并启动;
步骤一:新建任务
登录调度中心,点击下图所示 “ 新建任务 “ 按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。
步骤二:”GLUE 模式 (Java)” 任务开发
请点击任务右侧 “GLUE” 按钮,进入 “GLUE 编辑器开发界面 “,见下图。”GLUE 模式 (Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印 Hello World。
(”GLUE 模式 (Java)” 运行模式的任务实际上是一段继承自 IJobHandler 的 Java 类代码,它在执行器项目中运行,可使用 @Resource/@Autowire 注入执行器里中的其他服务,详细介绍请查看第三章节)
步骤三:触发执行
请点击任务右侧 “ 执行 “ 按钮,可手动触发一次任务执行(通常情况下,通过配置 Cron 表达式进行任务调度触发)。
步骤四:查看日志
请点击任务右侧 “ 日志 “ 按钮,可前往任务日志界面查看任务日志。
在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息。运行中的任务点击右侧的 “ 执行日志 “ 按钮,可进入日志控制台查看实时执行日志。
在日志控制台,可以 Rolling 方式实时查看任务在执行器一侧运行输出的日志信息,实时监控任务进度;