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时间表达式),都填写完成后保存即可
也可手动主动触发/启用/停用、以及一些其他功能
查看调度日志(执行日志)