官网地址:http://www.xuxueli.com/xxl-job/#/
XXL-JOB:轻量级任务调度框架
竞品分析:
功能 | Quartz集群 | LTS | Elastic-Job | XXL-JOB |
架构设计 | 中心式(伪) | 无中心式 | 无中心式 | 中心式 |
依赖框架 | Java | ZK | ZK | Java |
Web UI | 不支持 | 强 | 弱 | 强 |
任务路由策略 | 不支持 | 不支持 | 不支持 | 支持 |
使用:
一、部署“调度中心”
按照官网的内容直接部署项目就可以啦。下面是我部署成功的界面啦:
二、配置“部署执行器”
2.1:maven依赖
pom.xml:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.1</version>
</dependency>
2.2:执行器配置
application.yml:
xxl:
job:
admin:
addresses: http://192.168.22.67:8080/xxl-job-admin
executor:
appname: intern-job
ip:
port: 9999
logpath: /data/xxl-job/jobhandler
logretentiondays: -1
accessToken:
2.3:执行器组件配置
package com.tfjybj.intern.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
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.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
@ComponentScan(basePackages = "com.tfjybj.intern.provider.job")
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(initMethod = "start", destroyMethod = "destroy")
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;
}
}
测试一下:
package com.tfjybj.intern.provider.job;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.Serializable;
@JobHandler(value = "JobTest")
@Component
@Slf4j
public class JobTest extends IJobHandler implements Serializable {
/**
* 牛千千 xxlJob测试
* @param s
* @return
* @throws Exception
* @author 牛千千
* @since 0.0.1 2019-3-26 14:34:49
*/
@Override
public ReturnT<String> execute(String s) throws Exception {
XxlJobLogger.log(this.getClass().getSimpleName()+"--start");
try {
System.out.println("测试~~~");
/*测试数据*/
return SUCCESS;
} catch (Exception e){
e.printStackTrace();
return FAIL;
}
}
XxlJobLogger.log(this.getClass().getSimpleName() + "--end");
}
新增执行器:
APPName、端口号要与application.yml中配置的一样
新增任务:
Cron表达式格式:
秒 分 时 日 月 周 年(可选)。
特殊格式:
“*” 代表整个时间段。
“?”字符:表示不确定的值
“,”字符:指定数个值
“-”字符:指定一个值的范围
“/”字符:指定一个值的增加幅度。
n/m表示从n开始,每次增加m
“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
“W”字符:指定离给定日期最近的工作日(周一到周五)
“#”字符:表示该月第几个周X。6#3表示该月第3个周五