springboot使用XxlJob定时任务框架

发布于:2025-02-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

XxlJob是目前最流行的分布式定时任务中间件,对比quartz,代码的侵入明显少了很多,不需要每次在代码里配置job, 而XxlJobd的admin server组件提供了可视化ui, 对job和执行器能够从前端页面配置管理,简单易用,目前已经接入几百家互联网公司使用,XxlJob的强大任务调度能力为广大开发者和企业所认可

本文讲解springboot如何部署使用xxljob定时任务框架以及使用方法

一、下载xxljob源码

下载地址:https://github.com/xuyuadmin/xxljob

下载压缩包后进行解压;解压后的目录:

选择doc目录-db,招到sql文件 tables_xxl_job.sql,该表为xxljob配置表

把该表导入到数据库中,最终效果如下:

二、xxljob编译打包成可用部署包

1、用编译器打开解压的文件,进入源码目录,如图所示,这儿我们只需要打开xxl-job-admin,这个文件才是我们要使用的主要文件

2、找到配置文件,配置一下参数,用于后续接入使用

### web
server.port=8081   #管理后台进入端口
server.servlet.context-path=/xxl-job-admin  #管理后台进入路径

### actuator
management.server.base-path=/actuator
management.health.mail.enabled=false

### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.web.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.##########
spring.freemarker.settings.new_builtin_class_resolver=safer

### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://xxxx:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai #数据库连接地址(导表的数据库连接地址)
spring.datasource.username=xxxx  #数据连接账号
spring.datasource.password=xxxx  #数据库连接密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000

### xxl-job, email
spring.mail.host=smtp.qq.com #qq邮箱地址
spring.mail.port=25
spring.mail.username=xxx  #邮箱账号
spring.mail.from=xxx  #邮箱账号
spring.mail.password=xxx  #邮箱密码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

### xxl-job, access token
xxl.job.accessToken=xxxxx   #接入token,这儿在后端接入的时候需要填入该token

### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN

## 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

三、配置完成后进行编译打包

首先进入maven,预先下载相关package;打开pom.xml文件,下载更新package

更新完成后就可以进行编译打包了,这儿根据自己需求是编译成war包还是jar包,同样在pom.xml文件里进行设置

配置完成后进行打包操作,打包完成后得到jar或war包

三、部署配置

1、把打包好的包复制出来,如果是war包需要部署到tomcat上,如果是jar包可以直接部署在服务器上启动后可开始访问(jar包启动后端口是配置文件里填写的端口,上面写的8081,所以该端口为8081,如果是部署在Tomcat上则以Tomcat端口为准)

2、部署完成后就可开始访问,以jar包部署为例,如果部署到本地,访问地址为:http://127.0.0.1:8081/xxl-job-admin/toLogin

3、访问结果如下:

初始账号密码为:admin / 123456

到此,xxljob服务端已经部署完成,可在后端接入使用了

四、springboot配置

1、后端接入时需要先导入相关package,进入pom.xml文件,导入以下包

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

2、创建配置文件 

package com.wm.bean;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Log4j2
@Configuration
public class XxlJobConf {

    //部署的地址
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;
    //接入token,配置文件中填写的token
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    //接入服务的包名,比如后端代码包名
    @Value("${xxl.job.executor.appName}")
    private String appname;
    //接入地址,与上面adminAddresses任选其一
    @Value("${xxl.job.executor.address}")
    private String address;
    //接入地址ip,与上面adminAddresses任选其一
    @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() {
        log.info("==> 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);
        log.info("==> xxl-job config end");
        return xxlJobSpringExecutor;
    }

}

配置文件yaml方式:

xxl:
  job:
    admin:
      addresses: http://127.0.0.1:8081/schedule
    executor:
      address:
      appName: wmApi
      ip:
      port: 9998
      logPath: /data/xxl-job-log/jobhandler
      logRetentionDays: 7
    accessToken: xxxx

2、使用方法,在service层需要执行任务的方法上添加

@XxlJob("WatchMQStatus") 注解,里面参数为bean名称,这名称在配置时需要

列如:

五、xxljob配置页面配置及其使用

1、等所有配置完成后进入配置管理页面(xxl部署启动完成,后端服务部署启动完成)

2、进入执行器管理,该执行器为自行注册,无需手动接入(后端服务只要正常接入就会自动注册,也可手动新增)

手动新增:appname为后端服务配置文件中配置的appname,上面提到过,名称随意填;注册方式如果为自动注册时,只要检测到后端服务接入且名称AppName一样时就会自动接入,手动注册需要手动填入xxl部署地址

正常接入后可以看到,地址上已接入

3、任务管理-新增任务

主要填写点为执行器(执行器为对应接入的后端服务,如果选错,执行定时任务时会导致找不到对应的bean而执行报错)、JobHandler(上面讲的@XxlJob注解里面的bean名称)、调度类型(可选择触发时机,固定触发或定时触发,常用为cro时间表达式),都填写完成后保存即可

也可手动主动触发/启用/停用、以及一些其他功能

查看调度日志(执行日志)