首页 > 其他分享 >springboot项目集成xxl-job

springboot项目集成xxl-job

时间:2023-01-18 16:25:11浏览次数:75  
标签:执行器 springboot admin 调度 job 任务 xxl

一、xxl-job简介

  xxl-job是一个开源的分布式定时任务框架,它可以与其他微服务组件一起构成微服务集群。它的调度中心(xxl-job)和执行器(自己的springboot项目中有@XxlJob("定时任务名称")的方法)是相互分离,分开部署的,两者通过HTTP协议进行通信。

  将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;

调度模块(调度中心):

  负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;

  支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。

执行模块(执行器):

  负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;接收“调度中心”的执行请求、终止请求和日志请求等。

Xxl-job项目地址:
GitHub地址:https://github.com/xuxueli/xxl-job
Gitee地址:https://gitee.com/xuxueli0323/xxl-job

Xxl-job优点:

复制代码
1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
4、执行器HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行HA;
5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;
6、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
7、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
8、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;
9、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;
10、任务进度监控:支持实时监控任务进度;
11、Rolling实时日志:支持在线查看调度结果,并且支持以Rolling方式实时查看执行器输出的完整的执行日志;
12、自定义任务参数:支持在线配置调度任务入参,即时生效;
13、数据加密:调度中心和执行器之间的通讯进行数据加密,提升调度信息安全性;
14、邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件;
复制代码

 

二、Xxl-job使用

2.1. 下载项目
通过上面地址下载项目源码,用IDEA打开项目,配置好Maven,并刷新Maven加载项目相关依赖。

 

2.2. Install项目
  我们把项目install成maven依赖到本地maven仓库。防止后期我们把xxl-job-admin拿出来单独导入IDEA时,使用xxl-job-core这依赖时报错,因为阿里maven库是没有这个包的,要自己install一下。

 

2.3 xxl-job-admin构建

  xxl-job-admin 本身就是一个 springboot 项目,将 xxl-job-admin 这个子项目从源代码中复制出来,使用 idea 打开,配置好 Maven,刷新Maven导入依赖(xxl-job-core等。上面执行 install 步骤后,这里刷新Maven就不会报错)。这个就是我们的定时任务管理器(调度中心),将项目中 application.properties 配置文件中的 server.port 改一个非8080的不常用的端口,然后将数据库连接信息改成 xxl-job 的实际数据库连接地址。然后将xxl-job-admin项目打成jar包,执行命令 java -jar xxl-job-admin-2.4.0-SNAPSHOT.jar 独立于自己的真实业务项目运行。线上环境 将数据库连接地址改为真实服务器地址、用户名、密码,再将 xxl-job-admin-2.4.0-SNAPSHOT.jar 放到线上环境执行即可。

【  创建xxl-job-admin数据库 -- 修改配置文件 --  构建 xxl-job-admin   -- 启动xxl-job-admin项目 -- 访问xxl-job-admin 

 

 

将xxl-job-admin-2.4.0-SNAPSHOT.jar 放到D盘,打开cmd在该目录执行java -jar xxl-job-admin-2.4.0-SNAPSHOT.jar ,启动xxl-job。

 

在浏览器访问 http://localhost:9090/xxl-job-admin ,用户名admin 密码123456
登录成功,此时没有任务运行。定时任务管理器已经运行成功,我们开始集成到自己的项目。

 

 

三、将xxl-job集成到我们的springboot项目

3.1 引入Maven依赖

复制代码
        <!-- SpringBoot集成Xxl-Job -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.3.0</version>
        </dependency>
复制代码

 

3.2.编写配置文件

在我们的springboot项目的 application-dev.yml 配置文件中新增xxl-job配置信息。注意:如果 accessToken 不设置的话,最好把它注释掉,或者 输入xxl-job 默认的 default_token ,否则调用的时候容易引起获取不到token的报错。

复制代码
# Xxl-Job分布式定时任务调度中心
xxl:
job:
admin:
# 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。
addresses: http://localhost:9090/xxl-job-admin
# addresses: http://192.168.110.2:9090/xxl-job-admin
# 执行器通讯TOKEN [选填]:非空时启用 系统默认 default_token
accessToken: default_token
executor:
# 执行器的应用名称
appname: mls-xxl-job
# 执行器注册 [选填]:优先使用该配置作为注册地址
address: ""
# 执行器IP [选填]:默认为空表示自动获取IP
ip: ""
# 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999
port: 9999
# 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
logpath: D:\Codes\logs
#logpath: /data/logs/mls/job
# 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
logretentiondays: 7
复制代码

 

3.3 编写配置类

将 XxlJobConfig 配置类放入项目中的配置类文件夹下,此类可以不用修改。注意:如果上一个配置import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;

 

复制代码
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName: XxlJobConfig
 * @Description: xxl-job依赖配置
 * @author: 
 * @date: 2022年12月07日 08:37
 * @version: 1.0
 */
@Configuration  //是否开启xxl-job定时任务,注释掉 //@Configuration 则不开启定时任务
@Data
@Slf4j
public class XxlJobConfig {

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        XxlJobHelper.log(">>>>>>>>>>> xxl-job config init.>>>>>>>>>>>");
        System.out.println("=============== xxl-job config init.===============");

        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}
复制代码

 

 

 

 

3.4 编写测试类

复制代码
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * @ClassName: XxlJobTest
 * @Description: XxlJobTest
 * @author: 
 * @date: 2022年12月07日 12:58
 * @version: 1.0
 */
@Slf4j
@Component
public class XxlJobTest {

    @XxlJob("xxlJobTest")
    public ReturnT<String> xxlJobTest(String date) {
//        log.info("---------xxlJobTest定时任务执行成功--------");
        System.out.println("---------xxlJobTest定时任务执行成功--------");
        return ReturnT.SUCCESS;
    }

}
复制代码

 

3.5 启动项目

先启动调度中心(xxl-job-admin模块),再启动自己的springBoot服务(xxl-job-admin模块的端口已改为9090,所以本地在浏览器访问 http://localhost:9090/xxl-job-admin ,用户名admin 密码123456

 

3.6 任务调度中心,配置服务

3.6.1 执行器管理--新增执行器

 

 

3.6.2 任务管理--新增任务

 

3.6.3 任务管理--执行任务
测试可以点击“执行一次”,如果想一直运行,点击下拉的“启动”即可。至此,springboot 简单集成 xxl-job 已完成。

 

标签:执行器,springboot,admin,调度,job,任务,xxl
From: https://www.cnblogs.com/csnjava/p/17060093.html

相关文章

  • 【集成-Jedis】SpringBoot集成Jedis
    将jedis的依赖放进Maven<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.......
  • Springboot:aop注解实现
    概念Aop原指面向切面编程。但在spring中对aop的实现指的是:对方法执行前后加入其它逻辑代码,达到增强方法的目的spring-aop的底层实现一般实现aop,有两种方案:JDK动态......
  • SpringBoot2注解:@Configuration
    @configuration@Configuration这个注解作用就是告诉springboot这是一个配置类。配置类以及类里的方法都可以作为bean。用@Bean标记@Configuration包含 proxyBeanMeth......
  • Springboot整合策略模式概念->使用场景->优缺点->企业级实战
    一、前言策略模式可能是在工作中使用最多的,也是在面试中最常提到的,代码重构和优化的必备!小编之前也是一直说,其实没有真正的实战;最近有了机会实战了一下,来分享一下使用心得......
  • 统一返回对象封装和统一异常捕获封装springboot starter
    好久没有更新文章了,高龄开发没什么技术,去了外包公司后没怎么更新文章了。今天分享下统一处理starter,相信开发web系统的时候都是会涉及到前后端的交互,而后端返回数据的时候......
  • SpringBoot 拦截器 & 过滤器
    拦截器Java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种......
  • Springboot之OncePerRequestFilter 过滤器
    Springboot之OncePerRequestFilter过滤器原文链接:https://www.cnblogs.com/javalinux1/p/16389683.html类说明OncePerRequestFilter能够确保在一次请求只通过一次filte......
  • Kubernetes CronJob
    CronJobCronJob用于执行常规的计划操作(如备份、报告生成等)。格式*****分时日月周创建一个Job[root@master01job]#kubectlcreate-fcronjob.yamlapiVer......
  • SpringBoot自定义starter
    SpringBoot自定义starter目录SpringBoot自定义starter1自定义starter1.1新建project和Module1.2对于starter-provider1.3install1.4对于starter-user1.5测试2执行......
  • 230116_50_SpringBoot入门
    指定自定义的配置文件bill.propertiesbill.properitesname=billage=11happy=falsebirth=2021/12/2通过@PropertySource注解指定自定义的配置文件@PropertyS......