目录
背景介绍
推荐
什么是XXL-job?
如何获取xxl-job?
如何学习
如何使用
调用平台管理后台搭建
其他项目中使用xxl-job任务调度
自此:搭建任务调度管理后台、自己项目整合xxl-job完毕,超级简答。
在官方问题中,提供了7中整合的方式,以及相关配置。具体需要哪种形式的可以看看官网文档哦
项目部署
希望对大家有帮助,是不是很方便呢,超好用!推荐
项目中经常会用到定时任务,之前在项目中定时任务主要是使用@scheduled注解来完成,
使用@Scheduled弊端:
1、笨重繁琐,定时任务执行的时间必须写在代码里面,如果需要修改定时任务时间,必须重新上传代码,启动后才会生效。
2、不够灵活,无法控制定时任务的随时执行。例如测试人员做了一笔交易之后,需要等待定时任务自动执行,才会触发后续的操作,无法立即操作。
综合来说:需要一个定时任务管理的功能,在这里能支持配置定时任务的执行时间,并且支持手动执行定时任务。
在github上看了集中任务调度的框架,最终选择“分布式任务调度平台XXL-JOB”,个人推荐蛤。
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用
个人推荐访问码云:https://gitee.com/xuxueli0323/xxl-job 直接克隆下载即可
或者在github上直接下载,不支持外网的,建议还是用码云呗
学习建议:
在官网的API学习
xxl-job提供了超级详细的API
官方文档地址:https://www.xuxueli.com/xxl-job/
非常推荐大家花两个小时的时间大概阅读一下xxl-job的官网文档,基本都是文档里面学习的
如果你是一个小白,那么也可以跟随着我这篇文章,做一个非常简单的入门Demo,整体的项目搭建完毕之后,再进一步的去学习xxl-jon。
本篇文章将结合API一步步给大家演示如何使用
1、获取xxl-job源码,在文档中,明确指出两个地址去下载xxl-job项目源码
2、请下载项目源码并解压,获取 “调度数据库初始化SQL脚本” 并执行即可。
D:\graduation\jobShcdule\xxl-job\doc\db
使用navicat,右键执行tables_xxl_job.sql文件即可,它会创建xxl_job数据库,且初始化8张表。
3、使用idea打开下载的项目
这个项目非常贴心,在下载的源码xxl-job提供了定时任务管理后台,并且针对不同的项目提供了类型的整合Demo
xxl-job-admin:定时任务管理后台项目
xxl-job-core:最基础的项目jar,需要依赖这个
xxl-job-executor-sample:提供了多种项目整合的DEMO
xxl-job-executor-sample-spring:spring项目整合xxl-job项目demo,需要增加application-xxl-job.xml,并且xml的具体配置信息全部写好
xxl-job-executor-sample-springboot:springboot项目整合xxl-job项目demo
4、 配置部署“调度中心”
调度中心项目:xxl-job-admin
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
/xxl-job/xxl-job-admin/src/main/resources/application.properties
### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 报警邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
[email protected]
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### 调度中心通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;
xxl.job.i18n=zh_CN
## 调度线程池最大线程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;
xxl.job.logretentiondays=30
5、启动xxl-job-admin项目,由于是springboot项目,因此可以直接运行XxlJobAdminApplication即可
注意
第一次在启动XxlJobAdminApplication项目时,可能会报各种包找不到。此时需要直接clean xxl-job,以及install xxl-job。因为这是一个聚合项目,因此只需要install xxl-job父工程即可,它会按照顺序去构建xxl-job-code、xxl-job-admin、以及xxl-job-executor-samples
6、登录访问
调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)
默认登录账号 “admin/123456”, 登录后运行界面如下图所示。
自此,调度平台管理后台部署完毕,超级无敌简单的。
具体这些操作详细看文档的:快速入门2.1~2.3有详细案例说明哦
在官网文档的:2.4 ~ 2.5 有详细说明,如果看不懂,也可以看我的。
1、看下载的executor-samples的demo。为了演示方便,直接使用springboot与xxl-job整合的案例。
这里为什么不使用spring与xxl-job案例呢?因为懒得去整合ssm三大框架
2、在代码以及文档中我们可以看到:
2.1 maven依赖 ~ 在pom文件引入xxl-code的jar包依赖
2.2 执行器配置
执行器地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
执行器配置,配置内容说明:
### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
2.3 执行器组件配置
@Bean
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;
}
2.4 开发第一个任务“Hello World”-- BEAN模式,实际上有八种模式去使用这个xxl-job,这里介绍我采用的Bean模式,也是最简单的一种啦
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("demoJobHandler")
public ReturnT demoJobHandler(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
XxlJobLogger.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
return ReturnT.SUCCESS;
}
2.5 然后在管理员后台中配置执行任务调度即可
3、基于上述提供demo的理解,将xxl-job整合进入自己的项目中。新建一个springboot项目:zhenghongbin
4、配置maven依赖
5、执行器配置~每个字段的详细解释看上2.2点,具体的配置看xxl-job-executor-samples
注意:这里值得一提的是appname,必须跟调用平台后台配置的执行器Appname一致,否则就不生效
6、增加执行器组件
这一段配置代码,无论是在demo还是在文档中都明确提出了,详细看下图
7、写一个最简单的Hello ~ bean方式
8、启动zhenghongbin项目~ 自己的项目
9、在任务调用中心配置执行任务 ~ bean
10、执行
在自己的项目中:
项目部署超级简单,当做一个普通的项目去发布即可。例如上述的两个项目都是springboot项目,因此使用jar包部署即可
1、编译任务调度中心后台jar
2、编译生成自己项目jar
生成这两个jar包,直接丢到服务器上,使用java -jar xxx 的方式去启动,出来的效果跟本地演示是一样的。
注意如果是服务器上运行,记得开放端口即可。