SpringBoot部署xxl-job方法详细讲解

 更新时间:2023年01月09日 10:19:28   作者:我有一只肥螳螂  
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java web实现账号单一登录,防止同一账号重复登录(踢人效果)

    Java web实现账号单一登录,防止同一账号重复登录(踢人效果)

    这篇文章主要介绍了Java web实现账号单一登录,防止同一账号重复登录,有点类似于qq登录踢人效果,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • SpringBoot使用 Sleuth 进行分布式跟踪的过程分析

    SpringBoot使用 Sleuth 进行分布式跟踪的过程分析

    Spring Boot Sleuth是一个分布式跟踪解决方案,它可以帮助您在分布式系统中跟踪请求并分析性能问题,Spring Boot Sleuth是Spring Cloud的一部分,它提供了分布式跟踪的功能,本文将介绍如何在Spring Boot应用程序中使用Sleuth进行分布式跟踪,感兴趣的朋友一起看看吧
    2023-10-10
  • Spring Boot定时器创建及使用解析

    Spring Boot定时器创建及使用解析

    这篇文章主要介绍了Spring Boot定时器创建及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot如何解析应用参数args

    SpringBoot如何解析应用参数args

    文章主要介绍了SpringBoot启动过程中如何解析`main`函数中的参数`args`,包括如何解析命令行参数、访问选项参数和非选项参数,接着,介绍了`ApplicationArguments`接口及其方法,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • java设计模式之中介者模式

    java设计模式之中介者模式

    这篇文章主要为大家详细介绍了java设计模式之中介者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 解决报错:java.lang.IllegalStateException: Failed to execute CommandLineRunner问题

    解决报错:java.lang.IllegalStateException: Failed to&nb

    在项目开发中,可能会遇到Elasticsearch启动报错的问题,原因可能包括版本不一致、端口配置错误、配置文件不匹配及服务未启动等,解决方法包括检查进程、重启服务等,这些经验可以帮助开发者快速定位问题并解决,保证项目顺利运行
    2024-10-10
  • Spring中的@Resource源码解析

    Spring中的@Resource源码解析

    这篇文章主要介绍了Spring中的@Resource源码解析,这个注解加载的时候经过的类是CommonAnnotationBeanPostProcessor和Autowired一样,也是postProcessProperties()方法,需要的朋友可以参考下
    2023-09-09
  • Javas使用Redlock实现分布式锁过程解析

    Javas使用Redlock实现分布式锁过程解析

    这篇文章主要介绍了Javas使用Redlock实现分布式锁过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java性能调优及排查方式

    Java性能调优及排查方式

    这篇文章主要介绍了Java性能调优及排查方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • SpringBoot集成RbbitMQ队列踩坑记录

    SpringBoot集成RbbitMQ队列踩坑记录

    这篇文章主要介绍了SpringBoot集成RbbitMQ队列踩坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04

最新评论