xxl-job简用记录

简述

在我们日常开发中会有一些业务逻辑需要定时任务处理,常用的定时任务有quartz和多线程定时任务@Scheduled实现,但是实现并没有良好的上报数据和监控数据,定时任务的结果无法实时告诉我们以及一些错误转移和并发定时调度问题等。要实现并发定时调度和故障转移等功能时存在难点,因此使用xxl-job处理此问题。这篇文章简单记录使用xxl-job使用。

技术栈

  1. spring boot基础框架模块
  2. java基础技术
  3. xxl-job分布式调度

分支模块

这里居于上一章节项目创建 feat/xxl-job分支

xxl-job样例

调度中心

  1. 官网源码地址:git仓库地址
  2. mysql表:https://github.com/xuxueli/xxl-job/blob/2.2.0/doc/db/tables_xxl_job.sql
  3. 可直接下载代码打包,或者使用docker打包下载使用。这里我个人使用docker镜像运行,docker-compose.yml(docker-compose up -d启动)如下:
version: '2.0'
services:
  xxl-job-admin:
    image: xuxueli/xxl-job-admin:2.2.0 # 公司使用版本 
    container_name: xxl-job-admin
    restart: always
    environment:
      # host.docker.internal: 主机地址
      PARAMS: "--spring.datasource.username=root --spring.datasource.password=root --spring.datasource.url=jdbc:mysql://host.docker.internal:3306/xxl_job?Unicode=true&characterEncoding=UTF-8"
    volumes:
      - /docker-software/xxl-job/applogs:/data/applogs
    ports:
      - "8089:8080"

启动成功后,登录调度中心查看http://localhost:8089/xxl-job-admin/ ,默认登录用户名和密码是admin/123456
如图:
在这里插入图片描述

执行器

导入core代码

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

配置注册xxl

application-dev.yaml配置

server:
  port: 8088
xxl:
  job:
    admin:
      address: http://localhost:8089/xxl-job-admin
    executor:
      appname: user-center
      ip: 127.0.0.1
      port: 9999
      logpath: ./logs/xxl-job
      logretentiondays: 30

XxlJobSpringExecutor配置

package com.lgh.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties(prefix = "xxl.job.executor")
public class XxlJobExecutorConfig {
    
    
    private Logger logger = LoggerFactory.getLogger(XxlJobExecutorConfig.class);
    @Value("${xxl.job.admin.address}")
    private String adminAddresses;
    private String appname;
    private String ip;
    private int port;
    private String accessToken = "";
    private String logPath;
    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;
    }
}

执行中心使用

调度逻辑代码

package com.lgh.job;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class XxlJobTest extends IJobHandler {
    
    

    @XxlJob("testJob")
    @Override
    public ReturnT<String> execute(String s) throws Exception {
    
    
        try {
    
    
            log.info(String.format("XxlJobTest execute,params is %s", s));
        } catch (Exception e) {
    
    
            return FAIL;
        }
        return SUCCESS;
    }
}

调度配置

执行器配置,记住,这里是docker容器,真实的ip地址是宿主ip,即host.docker.internal
在这里插入图片描述
任务配置
在这里插入图片描述

验证

查看日志验证或者打断点:

2021-02-27 17:08:50.014  INFO 40101 --- [dPool-799972927] c.xxl.job.core.executor.XxlJobExecutor   : >>>>>>>>>>> xxl-job regist JobThread success, jobId:2, handler:com.xxl.job.core.handler.impl.MethodJobHandler@3656a6cd[class com.lgh.job.XxlJobTest#execute]
2021-02-27 17:08:50.015  INFO 40101 --- [      Thread-12] com.lgh.job.XxlJobTest                   : XxlJobTest execute,params is 测试XxlJobTest
2021-02-27 17:08:52.418  INFO 40101 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2021-02-27 17:08:55.008  INFO 40101 --- [      Thread-12] com.lgh.job.XxlJobTest                   : XxlJobTest execute,params is 测试XxlJobTest
2021-02-27 17:09:00.000  INFO 40101 --- [      Thread-12] com.lgh.job.XxlJobTest                   : XxlJobTest execute,params is 测试XxlJobTest
2021-02-27 17:09:04.994  INFO 40101 --- [      Thread-12] com.lgh.job.XxlJobTest                   : XxlJobTest execute,params is 测试XxlJobTest

在这里插入图片描述

源码

github

猜你喜欢

转载自blog.csdn.net/soft_z1302/article/details/114176157