【Spring Boot 快速入门】十七、Spring Boot 集成XXL-JOB分布式任务调度平台

简介: 【Spring Boot 快速入门】十七、Spring Boot 集成XXL-JOB分布式任务调度平台

什么是XXL-JOB


  XXL-JOB是一个分布式任务调度平台,XXL-JOB具有操作简单、动态配置、动态配置、弹性扩容缩容、自动注册、各种测量配置、任务进度监控、跨语言、全异步、自定义任务参数、邮件报警、故障转移、用户管理、权限控制、数据加密、动态分片等各种特性,为我们在项目中提供了一个强大的全面的任务调度平台。

  XXL-JOB起始于2015年,经过近几年的发展和完善,已经越发的全面强大。小编今天在github中查看,目前有19.8k的star,8.4k的fork,有1692次的commits,至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,据不完全统计,目前有近500家大中型企业子在使用。

github地址

  使用XXL-JOB主要分为两步配置即可完成一个简单的任务调度中心,第一步,配置调度中心,第二步配置执行器。下面开始部署。


快速开始:


  本次Spring Boot 集成XXL-JOB分布式任务调度平台使用的环境是:

Maven
    Jdk1.8
    Mysql5.7
    2.1.2 xxl-job


配置调度中心


  下载完XXL-JOB源码之后,在项目文件中找到数据库脚本信息,执行一个数据库脚本,为配置中心初始化数据。


打开项目


  如下图是下载完成之后的XXL-JOB项目结构。

image.png


执行SQL脚本


  数据库脚本信息截图如下:


image.png


  数据库主要是初始化配置中心和初始化一个管理员用户,基本表就包含用户表、执行器表、日志表、分组表、配置表、线程锁表等相关表。表中也有相关字段的描述,比较全面介绍。


配置参数


  执行完SQL脚本之后,根据自己需要修改application.properties配置文件,主要有端口、项目名称、报警邮件配置、数据库配置、调度线程池最大线程配置、调度中心日志表数据配值等,配值方式与Spring boot配置方式相同。基本上采用默认的配置即可,只需要修改一个数据源。


### web
server.port=8080
server.context-path=/xxl-job-admin
### actuator
management.context-path=/actuator
management.health.mail.enabled=false
### resources
spring.mvc.servlet.load-on-startup=0
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
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC
spring.datasource.username=test
spring.datasource.password=12345678test
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, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### xxl-job, log retention days
xxl.job.logretentiondays=30


启动调度中心


  配置好所有的参数之后,启动XxlJobAdminApplication,任务调度中心启动完成之后,浏览器输入如下地址,进入管理平台。


  默认地址为:http://127.0.0.1:8080/xxl-job-admin


进入后台


  输入默认的用户名密码admin/123456,即可登陆到平台。


image.png


默认首页是数据报表,可以一目了然的看到相关任务调度信息。


image.png


配置执行器


  本次配置执行器是基于Spring Boot搭建一个执行器,在项目源码中作者也给出了相关的示例,大家可以参考。首先在IDEA中搭建一个基础的Spring Boot项目。搭建一个最基础的就可以,本次将以现成的项目进行介绍,如需要Spring Boot项目可以参考往期的文章链接。


引入pom


  在Spring Boot项目中引入xxl-job-core包,注意版本需要与Spring Boot 版本相互兼容,否则会报很多异常。


<!--定时调度项目-->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.1.2</version>
        </dependency>


XxlJobConfig配置类


  创建一个XxlJobConfig配置类,便于读取配置文件中的配置信息。加入@ComponentScan注解,扫描的包是执行器所在的位置包名。这样一个简单的XxlJobConfig配置类就完成了。


@Configuration
@ConditionalOnProperty(prefix = "xxl", value = "enable", havingValue = "true")
@ComponentScan(basePackages = "com.juejin.scheduling")
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;
    }
}


编写执行器


  在上一节中已经制定了执行器所在的包,下面在执行此包中创建一个执行器,需要加入@Component注解。在类中创建执行器方法,加入@XxlJob("TestXXLScheduled"),其中指定执行器方法名称,需要在调度中心后台中配置这个注解方法,以便调度中心调用此方法。在方法中可以加入自己的业务逻辑即可。这样一个简单的执行器几配置好了。


@Slf4j
@Component
public class TestXXLScheduled {
    @XxlJob("TestXXLScheduled")
    public ReturnT<String> TestXXLScheduled(String param){
     XxlJobLogger.log("测试XXL-JOB分布式任务调度平台---开始");
        //业务逻辑代码块
        System.out.println("测试XXL-JOB分布式任务调度平台执行了");
      XxlJobLogger.log("测试XXL-JOB分布式任务调度平台---结束");
    }
}


添加执行器


  登录XXL-JOB分布式任务调度平台,进入到执行器管理中,选择新增执行器,依次输入AppName、名称、排序等信息,由于是测试使用,选择手动注册,直接填写127.0.0.1:8081本地的执行器项目的地址即可。然后点击保存。

image.png


  在任务管理中新增一个任务,选择刚刚创建的执行器,依次输入任务名称,执行时间间隔、选择路由策略、执行策略、然后输入 @XxlJob("TestXXLScheduled")中的名称TestXXLScheduled到JobHandler中,输入负责人即可,任务就配置完成了。


image.png


运行执行器


  为了便于测试,本次将执行间隔设置为5秒,分别启动控制中心和执行器两个项目。可以看到执行器中输出了日志信息,代表执行器创建成功,任务在执行了。

image.png


结语


  好了,以上就是Spring Boot 集成XXL-JOB分布式任务调度平台的详细过程


目录
相关文章
|
1月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
14天前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
56 1
|
24天前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
24 1
|
14天前
|
XML 存储 Java
SpringBoot集成Flowable:构建强大的工作流引擎
在企业级应用开发中,工作流管理是核心功能之一。Flowable是一个开源的工作流引擎,它提供了BPMN 2.0规范的实现,并且与SpringBoot框架完美集成。本文将探讨如何使用SpringBoot和Flowable构建一个强大的工作流引擎,并分享一些实践技巧。
39 0
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
104 1
|
1月前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
99 0
|
1月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
113 2
基于Redis的高可用分布式锁——RedLock
|
3月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
12天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
48 16

热门文章

最新文章