什么是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项目可以参考往期的文章链接。
引入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分布式任务调度平台的详细过程