「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」
前言
大家好,明天就是双十一了,多少IT人值守在机房和战场上,为迎接一年一度的大卖会准备着。又有多少人在双十一进行了“剁手”,疯狂的采购。
今年的双十一来的格外的早,在10月20号就开始了双十一的预热,今年也暴雷出很多商家在原件基础上进行加价,然后再进行打折优惠,很多都比日常中的价格高很多,大家在网购的时候,注意价格变动,可以查查价格。合适的再购买。
在项目开发过程中,在一个项目中有很多任务需要在不同的时间节点运行,因此,本篇将给大家介绍一个实用的任务调度平台XXL-JOB。下面开始正题。
什么是XXL-JOB
XXL-JOB是一个分布式任务调度平台,XXL-JOB具有操作简单、动态配置、动态配置、弹性扩容缩容、自动注册、各种测量配置、任务进度监控、跨语言、全异步、自定义任务参数、邮件报警、故障转移、用户管理、权限控制、数据加密、动态分片等各种特性,为我们在项目中提供了一个强大的全面的任务调度平台。
XXL-JOB起始于2015年,经过近几年的发展和完善,已经越发的全面强大。小编今天在github中查看,目前有19.8k的star,8.4k的fork,有1692次的commits,至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,据不完全统计,目前有近500家大中型企业子在使用。
使用XXL-JOB主要分为两步配置即可完成一个简单的任务调度中心,第一步,配置调度中心,第二步配置执行器。下面开始部署。
快速开始:
本次Spring Boot 集成XXL-JOB分布式任务调度平台使用的环境是:
Maven
Jdk1.8
Mysql5.7
2.1.2 xxl-job
配置调度中心
下载完XXL-JOB源码之后,在项目文件中找到数据库脚本信息,执行一个数据库脚本,为配置中心初始化数据。
打开项目
如下图是下载完成之后的XXL-JOB项目结构。
执行SQL脚本
数据库脚本信息截图如下:
数据库主要是初始化配置中心和初始化一个管理员用户,基本表就包含用户表、执行器表、日志表、分组表、配置表、线程锁表等相关表。表中也有相关字段的描述,比较全面介绍。
配置参数
执行完SQL脚本之后,根据自己需要修改application.properties配置文件,主要有端口、项目名称、报警邮件配置、数据库配置、调度线程池最大线程配置、调度中心日志表数据配值等,配值方式与Spring boot配置方式相同。基本上采用默认的配置即可,只需要修改一个数据源。
### web
server.port=8080
server.context-path=/xxl-job-admin
### actuator
management.context-path=/actuator
management.health.mail.enabled=false
### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC
spring.datasource.username=test
spring.datasource.password=12345678test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=30
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.validation-query=SELECT 1
spring.datasource.tomcat.validation-interval=30000
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### xxl-job, log retention days
xxl.job.logretentiondays=30
启动调度中心
配置好所有的参数之后,启动XxlJobAdminApplication,任务调度中心启动完成之后,浏览器输入如下地址,进入管理平台。
默认地址为:http://127.0.0.1:8080/xxl-job-admin
进入后台
输入默认的用户名密码admin/123456,即可登陆到平台。
默认首页是数据报表,可以一目了然的看到相关任务调度信息。
配置执行器
本次配置执行器是基于Spring Boot搭建一个执行器,在项目源码中作者也给出了相关的示例,大家可以参考。首先在IDEA中搭建一个基础的Spring Boot项目。搭建一个最基础的就可以,本次将以现成的项目进行介绍,如需要Spring Boot项目可以参考往期的文章链接。
【Spring Boot 快速入门】三、Spring Boot集成MyBatis,可以连接数据库啦!
引入pom
在Spring Boot项目中引入xxl-job-core包,注意版本需要与Spring Boot 版本相互兼容,否则会报很多异常。
<!--定时调度项目-->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.1.2</version>
</dependency>
XxlJobConfig配置类
创建一个XxlJobConfig配置类,便于读取配置文件中的配置信息。加入@ComponentScan注解,扫描的包是执行器所在的位置包名。这样一个简单的XxlJobConfig配置类就完成了。
@Configuration
@ConditionalOnProperty(prefix = "xxl", value = "enable", havingValue = "true")
@ComponentScan(basePackages = "com.juejin.scheduling")
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.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@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;
}
}
编写执行器
在上一节中已经制定了执行器所在的包,下面在执行此包中创建一个执行器,需要加入@Component注解。在类中创建执行器方法,加入@XxlJob("TestXXLScheduled"),其中指定执行器方法名称,需要在调度中心后台中配置这个注解方法,以便调度中心调用此方法。在方法中可以加入自己的业务逻辑即可。这样一个简单的执行器几配置好了。
@Slf4j
@Component
public class TestXXLScheduled {
@XxlJob("TestXXLScheduled")
public ReturnT<String> TestXXLScheduled(String param){
XxlJobLogger.log("测试XXL-JOB分布式任务调度平台---开始");
//业务逻辑代码块
System.out.println("测试XXL-JOB分布式任务调度平台执行了");
XxlJobLogger.log("测试XXL-JOB分布式任务调度平台---结束");
}
}
添加执行器
登录XXL-JOB分布式任务调度平台,进入到执行器管理中,选择新增执行器,依次输入AppName、名称、排序等信息,由于是测试使用,选择手动注册,直接填写127.0.0.1:8081本地的执行器项目的地址即可。然后点击保存。
在任务管理中新增一个任务,选择刚刚创建的执行器,依次输入任务名称,执行时间间隔、选择路由策略、执行策略、然后输入 @XxlJob("TestXXLScheduled")中的名称TestXXLScheduled到JobHandler中,输入负责人即可,任务就配置完成了。
运行执行器
为了便于测试,本次将执行间隔设置为5秒,分别启动控制中心和执行器两个项目。可以看到执行器中输出了日志信息,代表执行器创建成功,任务在执行了。
结语
好了,以上就是Spring Boot 集成XXL-JOB分布式任务调度平台的详细过程,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。