SpringBoot整合Xxl-job实现定时任务

news/2024/5/18 23:37:02 标签: spring boot, java, spring, xxl-job, 定时任务

SpringBoot整合Xxl-job实现定时任务

本文目录

  • SpringBoot整合Xxl-job实现定时任务
      • 一、部署调度中心
        • 1、项目下载
        • 2、初始化数据
        • 3、修改properties配置文件
      • 二、部署SpringBoot项目
        • 1、引入依赖
        • 2、创建配置类
        • 3、修改配置文件
        • 4、创建执行器
        • 5、启动SpringBoot项目
      • 三、通过调度中心进行任务调度
        • 1、添加执行器
        • 2、添加任务
        • 3、任务调度中心发起任务调度
      • 四、小结

​ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

​ 如果是单机并且定时任务不多的情况,可以选择Timer注解@Scheduled或者Cron工具类等方式来实现,但是这有个缺点,那就是定时任务会写死在代码中,一旦启动,就不能暂停或者修改。如果修改的话,整个还项目要重新编译,这属实非常的麻烦。

​ 本篇文章将会介绍如何通过xxl-job来实现任务的调度

一、部署调度中心

1、项目下载

下面是调度中心代码的gitee地址,可以colon到本地

http://gitee.com/xuxueli0323/xxl-job

2、初始化数据

在下载好的项目中的doc/db目录下有一个tables_xxl_job.sql文件,先放到自己的数据库中执行,其实就是初始化好调度中心需要的表结构和数据

3、修改properties配置文件

用IDE打开clone好的项目,然后修改xxl-job-admin模块下的properties配置文件,只需要将连接数据库的url、username、password修改成你自己的就可以。修改好之后就可以启动xxl-job-admin调度中心了。然后打开http://localhost:8080/xxl-job-admin/就可以看到控制面板:

请添加图片描述

二、部署SpringBoot项目

1、引入依赖

<dependency>
	<groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.2.0</version>
</dependency>

2、创建配置类

java">@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;
    }
}

3、修改配置文件

xxl:
  job:
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin #部署的调度中心的url
    executor:
      appname: xxl-job-volunteer-executor #执行器的名字
      ip:
      port: 9999 #调度中心调用执行器时使用的端口
      logpath: /data/apploggs/xxl-job/jobhandler #日志路径
      logretentiondays: 30 #日志保留天数
    accessToken:

4、创建执行器

java">@Component
public class XxlJobSample {

    // myDemoJob是任务的名字,也是Spring中bean的名字
    @XxlJob("myDemoJob")
    public ReturnT<String> myDemoJob(String value) {
        System.out.println("myDemoJob:定时任务触发:" + value);
        return ReturnT.SUCCESS;
    }
    
}

5、启动SpringBoot项目

启动成功后会看到下面两行日志信息, 可以看到成功连接到了调度中心然后注册了将要被调度任务

 >>>>>>>>>>> xxl-job register jobhandler success, name:myDemoJob, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob]
 
 >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999

三、通过调度中心进行任务调度

1、添加执行器

请添加图片描述

输入配置文件中配置的appName,名称可以随意

请添加图片描述

2、添加任务

新增调度任务

请添加图片描述

请添加图片描述

查看调度任务

请添加图片描述

3、任务调度中心发起任务调度

请添加图片描述

在SpringBoot项目中可以看到控制台输出如下信息:

2022-01-16 11:54:05.039  INFO 7836 --- [Pool-1148366645] c.xxl.job.core.executor.XxlJobExecutor   : >>>>>>>>>>> xxl-job regist JobThread success, jobId:7, handler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob]
myDemoJob:定时任务触发:testParam
2022-01-16 11:55:38.059  INFO 7836 --- [      Thread-22] com.xxl.job.core.thread.JobThread        : >>>>>>>>>>> xxl-job JobThread stoped, hashCode:Thread[Thread-22,10,main]

四、小结

至此,SpringBoot整合Xxl-job就完成了,刚才的示例代码其实对于原来的项目还是有一定的侵入性的,上面仅仅演示了BEAN运行模式,说白了就是调用加了@XxlJob的方法。其实在创建任务的时候还可以尝试使用GLUE(Java)这一运行模式,这种方式其实就是执行你输入的Java代码,这种方式可以不用在原有的项目之上新增依赖或者配置,对于定时任务,只需要编写一个接口用于触发,然后GLUE(Java)任务定时的去请求暴露的接口即可

下面是代码片段:

java">public class DemoGlueJobHandler extends IJobHandler {

	@Override
	public void execute() throws Exception {
		XxlJobHelper.log("定时任务执行了一次");
        HttpRequest.post("http://localhost:8088/oos/test")
                  .header(Header.USER_AGENT, "xxl-job")//头信息,多个头信息多次调用此方法即可
                  .timeout(20000)//超时,毫秒
                  .execute();
	}

}

上面的代码其实会在执行器中进行执行,可以实现在Test里面跑一下,没有问题后再贴过来(还要注意复制import等信息)

以上就是今天的全部内容了,想了解更多,可以阅读官方文档


http://www.niftyadmin.cn/n/625735.html

相关文章

Spring注解扫描原理浅析

Spring注解扫描原理浅析 一、概述 ​ 本篇文章将会带着大家通过阅读源码的方式去揭秘Spring的注解扫描原理&#xff0c;如果你想让源码可编辑&#xff0c;那么可以把源码下载下来然后进行调试&#xff0c;关于编译Spring源码&#xff0c;我推荐这篇文章——(spring源码系列&a…

解决 Public key for xxx.rpm is not installed 公钥未安装

解决 Public key for xxx.rpm is not installed 问题概述 在使用yum安装软件失败后提示了类似于下面下信息 # 对应的公钥未安装 Public key for 67ffa375b03cea72703fe446ff00963919e8fce913fbc4bb86f06d1475a6bdf9-cri-tools-1.19.0-0.x86_64.rpm is not installed意义是说…

Lombok的介绍、使用和缺陷

Lombok的介绍、使用和缺陷 1、Lombok的介绍 Lombok可以通过简单的注解来代替实体类中的getter/setter、equals、toString、构造函数等方法&#xff0c;使代码更加简洁。 2、Lombok的使用 1、安装lombok插件 打开Idea, 左上角菜单选择 ”File --> Settings", 在弹出…

GoLang并发编程之Future模式的实现

GoLang并发编程之Future模式的实现 文章目录GoLang并发编程之Future模式的实现一、概述二、代码示例三、小结一、概述 ​ 在日常编程中&#xff0c;可能会遇到这样一个场景&#xff0c;一个任务可能有好几件事需要去做&#xff0c;并且这些事是完全可以并发执行的&#xff0c;…

解决: protoc-gen-go unable to determine Go import path for “*.proto“

解决:protoc-gen-go: unable to determine Go import path for “*.proto” 问题概述 在使用 protoc命令根据*.proto文件生成*pb.go文件时报了标题中的错误&#xff0c;并且在错误的下方&#xff0c;会提示相应的解决办法&#xff0c;这里我们使用的是第一种&#xff0c;稍微…

Controller接收处理json数据

Controller如何处理json数据 1.使用RequestBody接收json数据&#xff0c;并转换为对象 封装的Permission对象&#xff0c;用于接收json数据。 Data Data public class Permission {private Long id;private Long roleId;private String path;private List<User> users…

[LeetCode]1365. 有多少小于当前数字的数字

1365. 有多少小于当前数字的数字 给你一个数组 nums&#xff0c;对于其中每个元素 nums[i]&#xff0c;请你统计数组中比它小的所有数字的数目。 换而言之&#xff0c;对于每个 nums[i] 你必须计算出有效的 j 的数量&#xff0c;其中 j 满足 j ! i 且 nums[j] < nums[i] 。…

批量将B站学习视频以MP4格式下载到本地

批量将B站学习视频以MP4格式下载到本地 一、背景描述 有些爱学习的小伙伴可能在外出或者回老家过节前会有提前将学习视频缓存的习惯&#xff0c;但是缓存的视频只能用BilibiliApp来看&#xff0c;屏幕属实有一点点小&#xff0c;因此更想将其下载到电脑上&#xff0c;然后用自…