运维
docker
dockerfile详解
网络
使用sshuttle打通本地与k8s集群环境
使用ktconnect打通网络本地与集群网络
Spring Cloud
nacos部署
中间件
rabbitmq
XXL-JOB部署
RocketMQ部署
K3S
k3s证书过期修改
Kruise Rollout(灰度)
驱动
nginx
nginxWebUI
nginx-ui
Jenkins 介绍与部署文档
ClickHouse Docker 部署文档
本文档使用 MrDoc 发布
-
+
首页
XXL-JOB部署
官网:[xxl-job](https://gitee.com/xuxueli0323/xxl-job "xxx-job") 官方中文文档:[xxl-job中文文档](https://www.xuxueli.com/xxl-job/ "xxx-job中文文档") 克隆完成代码后,耐心等待下载完依赖。完成后,整体项目结构如下图:项目结构 - xxl-job-core 模块:XXL-JOB 核心。后续我们在编写执行器时,会引入该模块。 - xxl-job-admin 模块:调度中心。 - xxl-job-executor-samples 模块:提供了在 Spring、Spring Boot、JFinal、Nutz 等框架下的使用示例。 这里,我们需要编译的主要是 xxl-job-admin 模块,即调度中心。 ## 初始化 XXL-JOB 表结构 在 doc/db/tables_xxl_job.sql 地址,是 XXL-JOB 表结构的初始化脚本。我们需要在数据库中执行该脚本,完成初始化 XXL-JOB 表结构。如下图所示:  - xxl_job_lock:任务调度锁表; - xxl_job_group:执行器信息表,维护任务执行器信息; - xxl_job_info:调度扩展信息表: 用于保存 XXL-JOB 调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等; - xxl_job_log:调度日志表: 用于保存 XXL-JOB 任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等; - xxl_job_log_report:调度日志报表:用户存储 XXL-JOB 任务调度日志的报表,调度中心报表功能页面会用到; - xxl_job_logglue:任务GLUE日志:用于保存 GLUE 更新历史,用于支持 GLUE 的版本回溯功能; - xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息; - xxl_job_user:系统用户表; 自 XXL-JOB 2.1.0 Release 版本,去除对 Quartz 的依赖,所以我们就看不到 Quartz 相关的表哈。 ## 修改配置文件 打开 xxl-job-admin 模块,修改 src/main/resources/application.properties 配置文件 ```xml ### web # Web 服务器 server.port=8080 server.context-path=/xxl-job-admin ### actuator management.context-path=/actuator management.health.mail.enabled=false ### resources 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 ### xxl-job, datasource 调度中心 JDBC 链接 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=root_pwd spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource spring.datasource.tomcat.max-wait=10000 spring.datasource.tomcat.max-active=30 spring.datasource.tomcat.test-on-borrow=true spring.datasource.tomcat.validation-query=SELECT 1 spring.datasource.tomcat.validation-interval=30000 ### xxl-job email 报警邮箱 spring.mail.host=smtp.qq.com spring.mail.port=25 spring.mail.username=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 调度中心通讯TOKEN [选填]:非空时启用;调度中心国际化配置 [选填]: 默认为空,表示中文; "en" 表示英文; xxl.job.accessToken= ### xxl-job, i18n (default empty as chinese, "en" as english) xxl.job.i18n= ## xxl-job, triggerpool max size 调度线程池最大线程配置 xxl.job.triggerpool.fast.max=200 xxl.job.triggerpool.slow.max=100 ### xxl-job, log retention days 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能; xxl.job.logretentiondays=30 ``` 可以看到 XXL-JOB 使用了 Spring Boot,必须要改的项: - server.port :XXL-JOB 调度中心的服务器地址。可以根据自己的需要,修改该端口。 - spring.datasource :XXL-JOB 调度中心的数据源地址,必须修改成自己准备提供给 XXL-JOB 的数据库地址。 - spring.mail :报警邮箱,生产环境下必须配置,不然定时任务执行报错都不知道,简直要命。。 - xxl.job.accessToken :调度中心通讯令牌,建议填写。虽然说,内网一般很安全,但是以防万一,并且又没啥成本,直接给整上。 ## 修改日志配置文件 ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="1 seconds"> <contextName>logback</contextName> <property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern> </rollingPolicy> <encoder> <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n </pattern> </encoder> </appender> <root level="info"> <appender-ref ref="console"/> <appender-ref ref="file"/> </root> </configuration> ``` - 默认情况下,日志输出的地址是 /data/applogs/xxl-job/xxl-job-admin.log 。可以根据自己的需要,进行调整。 ## 搭建集群 构建对应的docker镜像进行部署 - DB配置保持一致; - 集群机器时钟保持一致:集群中的各个节点需要保持系统时钟的一致性,以避免由于时间差异导致的调度问题。如果是单机集群,则可以忽视这一点 - 数据库锁保证调度一致性:xxl-job通过数据库锁来保证集群环境下任务调度的一致性。调度中心在进行任务调度之前,会尝试获取一个数据库级别的锁,确保在同一时间只有一个调度中心节点执行任务调度 - 配置保持一致:除了数据库配置外,其他配置如登录账号配置也需要保持一致 - 负载均衡:推荐通过Nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回调配置、调用API服务等操作均通过该域名进行 - 主从数据库配置:如果使用MySQL的主从复制,调度中心集群节点需要强制走主库,以保证调度的一致性 ## 搭建执行器 ### 在 pom.xml 文件中,引入相关依赖。 ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>lab-28-task-xxl-job</artifactId> <dependencies> <!-- 实现对 Spring MVC 的自动化配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- XXL-JOB 相关依赖 --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.1.1</version> </dependency> </dependencies> </project> ``` ### 应用配置文件 在 application.yml 中,添加配置,如下: ```xml server: port: 9090 #指定一个端口,避免和 XXL-JOB 调度中心的端口冲突。仅仅测试之用 # xxl-job xxl: job: admin: addresses: http://127.0.0.1:8080/xxl-job-admin # 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; executor: appname: lab-28-executor # 执行器 AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册 ip: # 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务"; port: 6666 # ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口; logpath: /Users/yunai/logs/xxl-job/lab-28-executor # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径; logretentiondays: 30 # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能; accessToken: yudaoyuanma # 执行器通讯TOKEN [选填]:非空时启用; ``` ### XxlJobConfiguration 在 cn.iocoder.springboot.lab28.task.config 包路径下,创建 DataSourceConfiguration 类,配置 XXL-JOB 执行器。代码如下: ```java // XxlJobConfiguration.java @Configuration public class XxlJobConfiguration { @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() { // 创建 XxlJobSpringExecutor 执行器 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; } } ```
admin
2024年11月19日 14:05
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Rancher
Jenkins
ADMIN-UI
VBEN-ADMIN-UI
RUST-FS
MinIO
mindoc
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码