xxl-job简单的demo

163 阅读3分钟

xxl-job是一个分布式任务管理器

基本概念

信息删除时序图.jpg

执行器:想象成你的springboot的代码

调度器:想象xxl-job配置的网页

直接gitte下载在本地启动

 git clone https://gitee.com/xuxueli0323/xxl-job.git

配置xxl-job调度器

执行他的sql

image-20240324143334863.png

配置xxl-job调度器

主要配置mysql的信息与access token(用于执行器与调度器连接的凭证)

 ### web
 server.port=8080
 server.servlet.context-path=/xxl-job-admin
 ​
 ### actuator
 management.server.servlet.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
 #mybatis.type-aliases-package=com.xxl.job.admin.core.model
 ​
 ### xxl-job, datasource  
 spring.datasource.url=jdbc:mysql://xx.xxx.xxx.xxx:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
 spring.datasource.username=root
 spring.datasource.password=mysqlpassWord@666.
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 ​
 ### datasource-pool
 spring.datasource.type=com.zaxxer.hikari.HikariDataSource
 spring.datasource.hikari.minimum-idle=10
 spring.datasource.hikari.maximum-pool-size=30
 spring.datasource.hikari.auto-commit=true
 spring.datasource.hikari.idle-timeout=30000
 spring.datasource.hikari.pool-name=HikariCP
 spring.datasource.hikari.max-lifetime=900000
 spring.datasource.hikari.connection-timeout=10000
 spring.datasource.hikari.connection-test-query=SELECT 1
 spring.datasource.hikari.validation-timeout=1000
 ​
 ### xxl-job, email
 spring.mail.host=smtp.qq.com
 spring.mail.port=25
 spring.mail.username=xxx@qq.com
 spring.mail.from=xxx@qq.com
 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
 ​
 ### xxl-job, access token  
 xxl.job.accessToken=default_token
 ​
 ### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
 xxl.job.i18n=zh_CN
 ​
 ## 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
 ​

运行后进入可点击http://localhost:8080/xxl-job-admin/进入调度器界面,用密码密码为默认的admin/123456

执行器配置

需要自己在上面启动的调度界面创建执行器

1.进入执行器管理

image-20240324145109274.png

2.新增执行器

名字jeecg-module-taxation与你的springboot上面的appName相同就可以注册上去,名字随便取,机器地址可以不选(只是demo所以比较随意)

image-20240324145441347.png

3.使用springboot项目连接执行器

springboot项目加入pom

 <dependency>
             <groupId>com.xuxueli</groupId>
             <artifactId>xxl-job-core</artifactId>
             <version>2.4.0</version>
 </dependency>

配置yml文件

其中accessToken 与你上面调度器的accessToken相同

 xxl:
   job:
     admin:
       # 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。
       addresses: http://localhost:8080/xxl-job-admin
       # addresses: http://192.168.110.2:9090/xxl-job-admin
     # 执行器通讯TOKEN [选填]:非空时启用 系统默认 default_token 
     accessToken: default_token
     executor:
       # 执行器的应用名称
       appname: jeecg-module-taxation
       # 执行器注册 [选填]:优先使用该配置作为注册地址
       address: ""
       # 执行器IP [选填]:默认为空表示自动获取IP
       ip: ""
       # 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999
       port: 9998
       # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
       logpath: D:\Codes\logs
       #logpath: /data/logs/mls/job
       # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
       logretentiondays: 7

配置类

 package com.lc.oj.config;
 ​
 import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 ​
 ​
 @Configuration
 public class XxlJobConfig {
     private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
 ​
     @Value("${xxl.job.admin.addresses}")
     private String adminAddresses;
 ​
     @Value("${xxl.job.accessToken}")
     private String accessToken;
 ​
     @Value("${xxl.job.executor.appname}")
     private String appname;
 ​
     @Value("${xxl.job.executor.address}")
     private String address;
 ​
     @Value("${xxl.job.executor.ip}")
     private String ip;
 ​
     @Value("${xxl.job.executor.port}")
     private int port;
 ​
     @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.setAddress(address);
         xxlJobSpringExecutor.setIp(ip);
         xxlJobSpringExecutor.setPort(port);
         xxlJobSpringExecutor.setAccessToken(accessToken);
         xxlJobSpringExecutor.setLogPath(logPath);
         xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
 ​
         return xxlJobSpringExecutor;
     }
 ​
 ​
 }

配置任务执行的代码

@XxlJob内的字符串:执行任务的名字

 @Component
 public class SampleXxlJob {
     /**
      * 1、简单任务示例(Bean模式)
      */
     @XxlJob("demoJobHandler")
     public void demoJobHandler() throws Exception {
         XxlJobHelper.log("XXL-JOB, Hello World.");
 ​
         for (int i = 0; i < 5; i++) {
             XxlJobHelper.log("beat at:" + i);
             TimeUnit.SECONDS.sleep(2);
         }
         // default success
     }
 }

配置任务

1.进入任务管理,点击新增

image-20240324150105049.png

2.配置任务执行规则

执行器:之前你设置执行器时候的名字

任务描述:随便你怎么写

负责人:随便你怎么写

Cron:点击右侧可选择没多少时间执行一次

运行模式:如果是bean模式就要像上面使用@XxlJob写入名字

JobHandler:你填入的bean的名字

路由策略:默认选第一个,当你有多个服务器接入这个任务的时候也只会执行第一次接入的(在没有仔细学习xxl-job的时候被坑过,默认不负载均衡,使用nacos测试调试的时候永远都不来本地这边执行debug)

image-20240324150305030.png

3.配置完毕后即可点击执行

image-20240324151015655.png