2、配置文件com.xuxueli xxl-job-core 2.3.0
#xxljob #调度中心服务地址 xxl.job.admin.addresses = http://172.16.138.184:8080/xxl-job-admin #调度中心密钥,非空则启用 xxl.job.accessToken = #执行器地址,填写以后可以在调度中心手动填写执行器地址 xxl.job.executor.address = #执行器端口 xxl.job.executor.port = 9998 #日志保存位置 xxl.job.executor.logpath = /data/applogs/xxl-job/jobhandler #日志保存时间,最少3天,否则不启用 xxl.job.executor.logretentiondays = 73、配置类
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${spring.application.name}")
private String appname;
@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() {
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;
}
}
4、执行器任务
@Slf4j
@Component
public class JijJobCentre {
@Value("${job.used}")
private boolean cronUsed;
@XxlJob("jobName")
public void jobName(){
try {
log.info("job:jobName start");
if(!cronUsed){
log.info("当前为外网服务,不做定时任务,jobName end");
return;
}
System.out.println("job:jobName executor successful");
}catch (Exception e){
log.error("job:jobName error:{}",e.getMessage());
}
log.info("job:jobName end");
}
}
5、调度中心配置
1)启动xxl-job-admin服务,进入任务调度中心(ip:port/xxl-job-admin,用户名admin,密码123456)
2)执行器管理->新增执行器,AppName为spring.application.name,选择自动注册模式,如果指定服务的ip和端口可以进行手动录入。保存后可以在OnLine机器地址里查看注册的服务。
3)任务管理->新增任务。调度类型选择CRON,运行模式选择BEAN,JobHandler填写执行器任务中心的@XxlJob值。
6、其他| 配置 | 可选项 | 说明 |
|---|---|---|
| 调度类型 | 固定速度 | 输入Second轮询 |
| CRON | 按照CRON表达式执行 | |
| 运行模式 | BEAN | 按照执行器任务中心的@XxlJob任务来执行 |
| GLUD(*) | 按照写入的任务代码来执行 | |
| 路由策略 | 第一个 | 当选择该策略时,会选择执行器注册地址的第一台机器执行,如果第一台机器出现故障,则调度任务失败。 |
| 最后一个 | 当选择该策略时,会选择执行器注册地址的最后一台机器执行,如果最后一台机器出现故障,则调度任务失败。 | |
| 轮询 | 当选择该策略时,会按照执行器注册地址轮询分配任务,如果其中一台机器出现故障,调度任务失败,任务不会转移。 | |
| 随机 | 当选择该策略时,会按照执行器注册地址随机分配任务,如果其中一台机器出现故障,调度任务失败,任务不会转移。 | |
| 一致性HASH | 当选择该策略时,每个任务按照Hash算法固定选择某一台机器。如果那台机器出现故障,调度任务失败,任务不会转移。 | |
| 最不经常使用 | 当选择该策略时,会优先选择使用频率最低的那台机器,如果其中一台机器出现故障,调度任务失败,任务不会转移。 (实践表明效果和轮询策略一致) | |
| 最近最久未使用 | 当选择该策略时,会优先选择最久未使用的机器,如果其中一台机器出现故障,调度任务失败,任务不会转移。 (实践表明效果和轮询策略一致) | |
| 故障转移 | 当选择该策略时,按照顺序依次进行心跳检测,如果其中一台机器出现故障,则会转移到下一个执行器, 若心跳检测成功,会选定为目标执行器并发起调度。 | |
| 忙碌转移 | 当选择该策略时,按照顺序依次进行空闲检测,如果其中一台机器出现故障,则会转移到下一个执行器, 若空闲检测成功,会选定为目标执行器并发起调度。 | |
| 分片广播 | 当选择该策略时,广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数; 可根据分片参数开发分片任务。如果其中一台机器出现故障,则该执行器执行失败,不会影响其他执行器。 | |
| 阻塞策略 | 单机串行 | 调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行 |
| 丢弃后续调度 | 调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败 | |
| 覆盖之前调度 | 调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务 |
*参考自https://www.freesion.com/article/8626516462/



