分布式任务调度平台XXL-Job
目录
一、背景:原生的框架
几个概念:
1、执行器
2、触发器,就类似于这个:(秒,分 ,时,日,月,年)
网上有很多cron表达式的工具 cron.qqe2.com
原生的框架:
缺点:天生不支持集群,为避免任务重复执行的问题
是单机部署的
二、学习资料
XXL开源社区: https://www.xuxueli.com/xxl-job/#
三、下载源码,分析结构
3.1 初始化“调度数据库”
tables_xxl_job.sql
3.1.1 报错
MySql的版本号:Server version: 5.6.43-log MySQL Community Server (GPL)
但是推荐使用Mysql5.7+
所以我在执行数据库脚本时,就报了错
报错脚本内容:
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) NOT NULL,
`registry_key` varchar(255) NOT NULL,
`registry_value` varchar(255) NOT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
控制台输出:
[Err] 1071 - Specified key was too long; max key length is 767 bytes
解决办法:
将两个255改成100
3.1.2 数据库结构
3.2 xxl-job-admin 调度中心
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台
第一步:配置文件更改
第二步:运行XxlJobAdminApplication
第三步:然后浏览器打开:
http://localhost:8080/xxl-job-admin/
默认登录账号 “admin/123456”
打开后界面如下:
四、xxl-job-executor-sample-springboot 执行器
运行 XxlJobExecutorApplication
之前做过了操作
今天打开发现报错:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
09:46:51.929 logback [main] ERROR o.s.boot.SpringApplication - Application run failed
java.lang.RuntimeException: xxl-job method-jobhandler name invalid, for[class com.xxl.job.executor.service.jobhandler.SampleXxlJob#shardingJobHandler] .
at com.xxl.job.core.executor.impl.XxlJobSpringExecutor.initJobHandlerMethodRepository(XxlJobSpringExecutor.java:114)
at com.xxl.job.core.executor.impl.XxlJobSpringExecutor.afterSingletonsInstantiated(XxlJobSpringExecutor.java:38)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:963)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:326)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
at com.xxl.job.executor.XxlJobExecutorApplication.main(XxlJobExecutorApplication.java:13)
09:46:51.934 logback [main] INFO o.s.s.c.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'
Process finished with exit code 1
关键错误:
xxl-job method-jobhandler name invalid, for[class com.xxl.job.executor.service.jobhandler.SampleXxlJob#shardingJobHandler]
改了之后,就可以了