Github 地址: https://github.com/xuxueli/xxl-job/ 。
官⽅介绍: https://www.xuxueli.com/xxl-job/ 。
XXL-JOB 于 2015 年开源,是⼀款优秀的轻量级分布式任务调度框架,⽀持任务可视化管理、弹性 扩容缩容、任务失败重试和告警、任务分⽚等功能。关于XXL-JOB的特性可以参考下图(图片来自JavaGuid)
XXL-JOB的架构图如下:
从上图可以看出, XXL-JOB 由 调度中⼼ 和 执⾏器 两⼤部分组成。调度中⼼主要负责任务管理、
执⾏器管理以及⽇志管理。执⾏器主要是接收调度信号并处理。另外,调度中⼼进⾏任务调度时,是通过⾃研 RPC 来实现的。
不要被 XXL-JOB 的架构图给吓着了,实际上,我们要⽤ XXL-JOB 的话,只需要重写 IJobHandler ⾃定义任务执⾏逻辑就可以了,⾮常易⽤!
@JobHandler(value="myApiJobHandler")
@Component
public class MyApiJobHandler extends IJobHandler {
@Override
public ReturnT<String> execute(String param) throws Exception {
//......
return ReturnT.SUCCESS;
}
}
还可以直接基于注解定义任务。
@XxlJob("myAnnotationJobHandler")
public ReturnT<String> myAnnotationJobHandler(String param) throws Exception {
//......
return ReturnT.SUCCESS;
}
在Spring中导入依赖即可
<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>1.8.2</version>
</dependency>
配置application.yml文件
xxl:
job:
executor:
appname: ${spring.application.name}
logpath: ${spring.application.name}/xxl-job
logretentiondays: 30
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin
accessToken: default_token
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
添加执行器到IOC容器中
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("${xxl.job.executor.appname}")
private String appname;
@Value("${server.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.setPort(port + 10000);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
添加执行任务
@XxlJob("testJob")
public void testJob(){
System.out.println("执行 xxl job");
}
在web端手动添加任务执行
路由策略如下:
之后控制台开启任务即可。