1) TBSchedule:淘宝推出的一款非常优秀的高性能分布式调度框架,目前被应用于阿里、京东、支付宝、国美等很多互联网企业的流程调度系统中。但是已经多年未更新,文档缺失严重,缺少维护。
2) XXL-Job:大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
3)Elastic-job:当当网借鉴TBSchedule并基于quartz 二次开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,具有任务高可用以及分片功能。
4)Saturn: 唯品会开源的一个分布式任务调度平台,基于Elastic-job,可以全域统一配置,统一监 控,具有任务高可用以及分片功能。 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
源码地址:https://gitee.com/xuxueli0323/xxl-job 文档地址:https://www.xuxueli.com/xxl-job/
数据库sql脚本:下载项目源码并解压;
脚本所在位置:/xxl-job/doc/db/tables_xxl_job.sql
若为集群部署,集群情况下各节点务必连接同一个mysql实例
若mysql做主从,调度中心集群节点务必强制走主库
- xxl_job_lock:任务调度锁表;
- xxl_job_group:执行器信息表,维护任务执行器信息;
- xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
- xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
- xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
- xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
- xxl_job_user:系统用户表;
启动方式:
cd /opt/hmtt/db
./close.sh
./start.sh
调度中心项目: xxl-job-admin
配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/application.properties
数据库连接信息:
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.85.143:3306/xxl_job?Unicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
启动项目:XxlJobAdminApplication
访问调度中心:http://localhost:8080/xxl-job-admin
默认登录账号密码: admin 123456
1.pom.xml配置文件
com.xuxueli
xxl-job-core
2.2.0
2.application.yml配置文件
xxl:
job:
admin:
addresses: http://192.168.85.143:8080/xxl-job-admin
executor:
appname: ${spring.application.name}-executor
port: 9991
3.引导类开启定时任务
@EnableScheduling //开启定时任务
@SpringBootApplication
public class ArticleApp {
public static void main(String[] args) {
SpringApplication.run(ArticleApp.class, args);
}
}
4.添加xxl-job配置类
@Configuration
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.port}")
private int port;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setPort(port);
return xxlJobSpringExecutor;
}
}
5.创建task任务类
注意:注解保持一致,返回结果是ReturnT,携带参数是String param
@Service
@Slf4j
public class HotArticleTask {
@Autowired
private IApArticleService articleService;
@XxlJob("computeHotArticleJob") //一定要与调度中心新建任务的JobHandler的值保持一致
public ReturnT computeHotArticleJob(String param) throws Exception {
log.info("开始执行每日文章分值计算任务...");
try {
articleService.compute();
} catch (Exception e) {
e.printStackTrace();
return ReturnT.FAIL;
}
return ReturnT.SUCCESS;
}
}
6.启动项目测试
1.配置执行器
2.新增任务管理
3.启动执行
注意事项:
1.定时执行失败,时间不一致(虚拟机时间与本机时间对不上)重启虚拟机或者更新时间