首页 > 其他分享 >xxl-Job分布式任务调度

xxl-Job分布式任务调度

时间:2022-10-15 16:47:51浏览次数:54  
标签:job 调度 Job import 任务调度 com xxl

一、分布式任务调度产品了解:

1) TBSchedule:淘宝推出的一款非常优秀的高性能分布式调度框架,目前被应用于阿里、京东、支付宝、国美等很多互联网企业的流程调度系统中。但是已经多年未更新,文档缺失严重,缺少维护。

2) XXL-Job:大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

3)Elastic-job:当当网借鉴TBSchedule并基于quartz 二次开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,具有任务高可用以及分片功能。

4)Saturn: 唯品会开源的一个分布式任务调度平台,基于Elastic-job,可以全域统一配置,统一监 控,具有任务高可用以及分片功能。 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

源码地址:https://gitee.com/xuxueli0323/xxl-job 文档地址:https://www.xuxueli.com/xxl-job/

 

二、初始化“调度数据库”

数据库sql脚本:下载项目源码并解压;

脚本所在位置/xxl-job/doc/db/tables_xxl_job.sql

若为集群部署,集群情况下各节点务必连接同一个mysql实例

若mysql做主从,调度中心集群节点务必强制走主库

- xxl_job_lock:任务调度锁表;
- xxl_job_group:执行器信息表,维护任务执行器信息;
- xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
- xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
- xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
- xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
- xxl_job_user:系统用户表;

 

三、配置部署"调度中心"项目

启动方式:

  1. 虚拟机启动
    cd /opt/hmtt/db
    ./close.sh
    ./start.sh
  2. 源码启动

调度中心项目: xxl-job-admin

  配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/application.properties

  数据库连接信息:

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.85.143:3306/xxl_job?Unicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

启动项目:XxlJobAdminApplication

访问调度中心:http://localhost:8080/xxl-job-admin

默认登录账号密码:admin 123456  

 

四、项目集成xxl-job

微服务端:

  1.pom.xml配置文件

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

  2.application.yml配置文件

xxl:
  job:
    admin:
      addresses: http://192.168.85.143:8080/xxl-job-admin
    executor:
      appname: ${spring.application.name}-executor
      port: 9991

  3.引导类开启定时任务

@EnableScheduling  //开启定时任务
@SpringBootApplication
public class ArticleApp {
    public static void main(String[] args) {
        SpringApplication.run(ArticleApp.class, args);
    }
}

  4.添加xxl-job配置类

package com.heima.article.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;

/**
 * xxl-job config
 *
 * @author xuxueli 2017-04-28
 */
@Configuration
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.port}")
    private int port;
    
    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setPort(port);

        return xxlJobSpringExecutor;
    }
}

  5.创建task任务类

  注意:注解保持一致,返回结果是ReturnT,携带参数是String param

package com.heima.article.task;

import com.heima.article.service.IApArticleService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class HotArticleTask {

    @Autowired
    private IApArticleService articleService;

    @XxlJob("computeHotArticleJob") //一定要与调度中心新建任务的JobHandler的值保持一致
    public ReturnT<String> computeHotArticleJob(String param) throws Exception {
        log.info("开始执行每日文章分值计算任务...");

        try {
            articleService.compute();
        } catch (Exception e) {
            e.printStackTrace();
            return ReturnT.FAIL;
        }
        return ReturnT.SUCCESS;
    }
}

   6.启动项目测试

任务调度中心:

  1.配置执行器

  2.新增任务管理

  3.启动执行

五、总结

注意事项:

  1.定时执行失败,时间不一致(虚拟机时间与本机时间对不上)重启虚拟机或者更新时间

标签:job,调度,Job,import,任务调度,com,xxl
From: https://www.cnblogs.com/hyqingbk/p/16794462.html

相关文章