一、下载源码
xxl-job源码地址:
GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
2.4.2版本为例:https://github.com/xuxueli/xxl-job/archive/refs/tags/2.4.1.tar.gz
xxl-job文档地址:
分布式任务调度平台XXL-JOB
参考链接:
Java -- XXL-JOB分布式任务调度平台
二、安装依赖环境
因为需要打包,所以要有Maven环境(Linux安装部署Maven;如果本地打包好了,直接上传jar包,可以不用安装Maven)
因为部署的是jar应用,启动时需要依赖Jdk1.8+(Linux安装部署Java)
因为xxl-job需要存储数据,需要依赖Mysql数据库(如果连接外部MySQL,可以不用部署)
三、安装
本文针对源码编译进行安装
首先把下载好的源码压缩吧解压后,通过idea打开,打开后的目录结构如下
其中xxl-job-admin是服务端,用来管理调度任务的,xxl-job-core是一些核心依赖代码,xxl-job-executor-samples是一个客户端使用xxljob示例。
1、xxljob需要mysql数据库,创建xxl_job库,并把源码doc文档下面db中的tables_xxl_job.sql文件执行一下,会生成几张表,如下
2、然后配置xxl-job-admin模块的application.properties配置文件,修改数据库配置,其中
xxl.job.accessToken配置可以按照实际配置,可以任意配置,对应客户端注册job服务使用该配置就行
3、启动xxl-job-admin模块,访问http://localhost:8080/xxl-job-admin/toLogin地址,进入管理界面,账户:admin ,默认密码:123456
四、客户端job注册
1、引入依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.1</version>
</dependency>
2、加入配置信息
yaml配置
xxl:
job:
accessToken: default_token
admin:
# 调度中心服务地址
addresses: http://127.0.0.1:8080/xxl-job-admin
executor:
address: ''
# 必须唯一 执行器名称
appname: jobhandel
ip: ''
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 30
# 执行器回调端口,用于接受调度消息
port: 9998
properties配置
# 调度中心服务地址
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=default_token
# 必须唯一 执行器名称
xxl.job.executor.appname=test-job
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
# 执行器回调端口,用于接受调度消息
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=D:\\javaproject\\其他\\xxljob\\test
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
3、创建一个配置类,用于读取上述配置,并配置好handel信息
package com.blbn.quick.job;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import com.xxl.job.core.util.IpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@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() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(IpUtil.getIp());
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
4、创建一个执行器的任务类,用于执行真正的业务逻辑
package com.blbn.quick.job;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
/**
* XxlJob开发示例(Bean模式)
*
* 开发步骤:
* 1、任务开发:在Spring Bean实例中,开发Job方法;
* 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
* 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
* 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;
*
* @author xuxueli 2019-12-11 21:52:51
*/
@Component
public class SampleXxlJob {
private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("testJob")
public void testJob() throws Exception {
XxlJobHelper.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
// default success
}
}
5、在调度中心中,添加该执行器
其中AppName要和客户端服务中配置的 xxl.job.executor.appname 内容相同,名称自定义,注册方式为自动注入(如果选择手动注册,则机器地址为客户端服务部署的信息,IP为服务部署地址,端口号为 xxl.job.executor.port 指定,示例:http://127.0.0.1/9999)
6、启动客户端服务,看到下面信息说明注册成功
2024-10-11 12:42:37.222 [Thread-11] [INFO ] com.xxl.job.core.server.EmbedServer - >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999
7、根据代码中业务,添加任务,执行真正的业务逻辑
- 其中JobHandler 对应的是具体任务类中 @XxlJob() 注解中填写的名称
- 运行模式 选择bean ,因为我们这里就是springbean 的方式,注入的要执行的任务
- 其他信息正常填写就行
到此就完成了