信息发布→ 登录 注册 退出

SpringBoot整合Xxl-job实现定时任务的全过程

发布时间:2026-01-11

点击量:
目录
  • 前言
  • 一、部署调度中心
    • 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、创建配置类

      @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、创建执行器

      @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项目中可以看到控制台输出如下信息:

      2025-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
      2025-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)任务定时的去请求暴露的接口即可

      下面是代码片段:

      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等信息)

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

      总结

      在线客服
      服务热线

      服务热线

      4008888355

      微信咨询
      二维码
      返回顶部
      ×二维码

      截屏,微信识别二维码

      打开微信

      微信号已复制,请打开微信添加咨询详情!