SpringBoot部署xxl-job方法详细讲解
作者:我有一只肥螳螂
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,这篇文章主要介绍了springboot整合xxl-job流程,需要的朋友可以参考下
部署xxl-job
K8S 部署 xxl-job 参考文档:https://www.jb51.net/article/252770.htm
SpringBoot配置
maven 配置
pom 文件添加依赖
<!--xxl-job依赖--> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version> </dependency>
application.yaml
添加参数
- addresses:调度中心部署跟地址,如调度中心集群部署存在多个地址则用逗号分隔,执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"
- appname:执行器的名称,后面配置 xxl-job-admin 要用
- ip:ip地址
- port:对外暴露的端口号,注意,如果配置多个执行器时,防止端口冲突
- logpath: 执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限
- logretentiondays: 执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效;
- accessToken:执行器通讯token[选填]:非空时启动
xxl:
job:
admin:
addresses: http://192.168.140.1:8080/xxl-job-admin
executor:
appname: demo-feng-executor
ip:
port: 9997
logpath: /home/applogs/xxl-job/jobhandler
logretentiondays: -1
accessToken:
配置 XxlJobConfig
- 引入 application.yaml 配置的参数
- 注册 XxlJobSpringExecutor
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; 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; @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 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; } }
XxlJobSpringExecutor
这里聊一下 XxlJobSpringExecutor,不想多了解的可以跳过
afterSingletonsInstantiated 函数
- this.initJobHandlerMethodRepository(applicationContext):初始化 JobHandler,就是找到带有注解 @XxlJob 的 Job ,进行注册
- GlueFactory.refreshInstance(1):刷新GlueFactory, 这里type 为 0/1,1 就是说明使用的是Spring 框架
- super.start():调用父类start() 方法,核心逻辑
public void afterSingletonsInstantiated() { this.initJobHandlerMethodRepository(applicationContext); GlueFactory.refreshInstance(1); try { super.start(); } catch (Exception var2) { throw new RuntimeException(var2); } }
start函数
- initLogPath:初始化log路径,没有给定,默认是 /data/applogs/xxl-job/jobhandler
- initAdminBizList:初始化 invoker, admin-client,这里就是给定的 admin server 端地址,一个或者多个,封装成 AdminBizClient 对象,放在adminBizList list里面,以便后面的回调、注册、移除等操作
- JobLogFileCleanThread.getInstance().start:初始化 日志 清理线程,定时清理
- TriggerCallbackThread.getInstance().start():初始化回调线程
- initEmbedServer:初始化 executor-server
public void start() throws Exception { XxlJobFileAppender.initLogPath(this.logPath); this.initAdminBizList(this.adminAddresses, this.accessToken); JobLogFileCleanThread.getInstance().start((long)this.logRetentionDays); TriggerCallbackThread.getInstance().start(); this.initEmbedServer(this.address, this.ip, this.port, this.appname, this.accessToken); }
新建执行任务
- MyTask 为任务名
- 注解 @XxlJob 会被 spring 找到,起名需要注意,后面配置 xxl-job-admin 要用到
- 函数里可以自定义需要执行的内容
@Slf4j @Component public class MyTask { @XxlJob("fengDemoTask") private void task() { log.info("成功调用demo任务"); } }
配置xxl-job-admin
执行器管理
点击 “新增”
- appname:对应 application.yaml 配置的 xxl.job.executor.appname
- 名称:自定义中文名,在任务管理会显示
- 注册方式:建议使用手动
- 机器地址:服务运行的 ip + 端口,端口为 application.yaml 配置的 xxl.job.executor.port
任务管理
选择刚刚执行器,点击 “新增”
- 任务描述:自定义
- 负责人:自定义
- 调度类型:建议选择 CRON
- Cron:表达式参考文章,传送门
- 运行模式:BEAN
- JobHandler:注解 @XxlJob 的名称
- 路由策略:默认是第一个,如果配置了多个需要同时调度,可以选择分片广播
编辑任务状态
到此这篇关于SpringBoot部署xxl-job方法详细讲解的文章就介绍到这了,更多相关SpringBoot部署xxl-job内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!