关于java:XXLJOB-基础教程

39次阅读

共计 4843 个字符,预计需要花费 13 分钟才能阅读完成。

原文地址:XXL-JOB 基础教程

一、背景

随着公司的产品我的项目流动的减少,流动进行过程中都须要用到大量定时器。为了能方便快捷的管制定时器的启动、执行和敞开,咱们弃用了 Spring Boot 中自带的 @Scheduled 注解,采纳开发、配置和操作更为灵便的 XXL-JOB。

二、介绍

2.1 简略介绍

XXL-JOB 是一个分布式任务调度平台,其外围设计指标是开发迅速、学习简略、轻量级、易扩大。现已凋谢源代码并接入多家公司线上产品线,开箱即用。

其个性十分丰盛:

  • 简略:反对通过 Web 页面对工作进行 CRUD 操作,操作简略,一分钟上手;
  • 动静:反对动静批改工作状态、启动 / 进行工作,以及终止运行中工作,即时失效;
  • 调度核心 HA(核心式):调度采纳核心式设计,“调度核心”自研调度组件并反对集群部署,可保障调度核心 HA;
  • 执行器 HA(分布式):工作分布式执行,工作”执行器”反对集群部署,可保障工作执行 HA;
  • 注册核心: 执行器会周期性主动注册工作, 调度核心将会主动发现注册的工作并触发执行。同时,也反对手动录入执行器地址;
  • ……

2.2 架构

从图中可知,XXL-JOB 架构大抵分为 2 局部:调度核心和执行器。

  • 调度核心:负责管理调度信息,依照调度配置收回调度申请,本身不承当业务代码。调度零碎与工作解耦,进步了零碎可用性和稳定性,同时调度零碎性能不再受限于工作模块;反对可视化、简略且动静的治理调度信息,包含工作新建,更新,删除,GLUE 开发和工作报警等
  • 执行器:负责接管调度申请并执行工作逻辑。工作模块专一于工作的执行等操作,开发和保护更加简略和高效;接管“调度核心”的执行申请、终止申请和日志申请等。

三、实战

3.1 下载

git clone https://github.com/xuxueli/xxl-job.git

下载后其文件目录如下图:

官网曾经提供残缺的案例:

xxl-job-admin 是任务调度核心我的项目。生产环境中,咱们能够间接应用其源码,打包部署。

xxl-job-executor-samples 是执行器的案例我的项目,理论开发中须要整合其配置文件到咱们本人的我的项目中应用。

xxl-job-core 为外围我的项目,调度核心和执行器我的项目都须要依赖它。

3.2 导入数据

咱们在 xxl-job\doc\ db 目录,里边有个名为 tables_xxl_job.sql 文件。

咱们须要在数据库实例中创立名为 xxl_job 的数据库,将上边的 sql 文件在此数据库中执行。

3.3 启动调度核心

用 IDEA 关上 xxl-job 我的项目,选中 xxl-job-admin 子项目,对 application.properties 进行批改:

### web
server.port=8080
server.servlet.context-path=/xxl-job-admin

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

配置文件还有很多配置,此处咱们只批改数据库连贯配置,而后运行我的项目。

关上浏览器拜访 http://localhost:8080/xxl-job…, 如下图:

默认登录账号“admin/123456”,登录后如下图:

3.4 工作执行器

执行器我的项目的演示,笔者采纳理论开发流程形式,即手动新建和配置执行器我的项目。

第一步,在搭建执行器我的项目之前,咱们须要将 xxl-job-core 源码打包到本地 Maven 仓库。而后新建 Spring Boot 我的项目,咱们命名为 job-demo

我的项目依赖包如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

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

留神:xxl-job-core 就是方才打包好的 jar 依赖,当然咱们也能够应用近程 Maven 仓库的依赖!

第二步,咱们须要配置 application.properties 文件和 logback.xml 两个文件(从 xxl-job-executor-sample-springboot 复制过去即可):

# web port
server.port=8081

# no web
#spring.main.web-environment=false

# log config
logging.config=classpath:logback.xml

### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### xxl-job, access token
xxl.job.accessToken=

### xxl-job executor appname
xxl.job.executor.appname=job-demo

### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=

### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999

### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30

因为咱们是用同一台机器测试,因而咱们只需批改 xxl.job.executor.appname,因为只是演示,日志的文件门路就不批改了。

第三步,配置 XXL-JOB 执行器组件,用于读取 application.properties 中的配置数据:

@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;
    }

}

第四步,编写定时工作,即我的项目中的业务代码:

@Component
public class MyTask {

    /**
     * @XxlJob 中 value 值惟一即可
     * @param param
     * @return
     */
    @XxlJob("firstTask")
    public ReturnT<String> firstTask(String param) {XxlJobHelper.log("start firstTask param = {}", param);
        
        // 业务代码,此处作为演示只打印 hello xxl-job 
        System.out.println("hello xxl-job");
        
        XxlJobHelper.log("end firstTask");
        
        return ReturnT.SUCCESS;
        
    }
}

定时器类中,办法必须有 String 类型的入参,返回值必须是 ReturnT<String>,否则启动我的项目会报错。最初须要应用 @XxlJob 注解,否则调度核心无奈调度该工作。

最初启动执行器我的项目。

3.5 配置定时工作

调度核心和执行器我的项目都启动了,咱们如何将两者关联起来呢?很简略,咱们来到 XXL-JOB 调度核心的治理界面。

第一步,点击“执行器治理”,新增执行器:

第二步,点击“工作治理”,新增工作:

咱们设置每 5 秒执行一次工作。

第三步,新增工作胜利后,工作列表会呈现新增的记录,点击启动:

执行器我的项目的控制台打印了“hello xxl-job”,通过操作调度核心,胜利启动和执行定时器工作。

本次演示只是浅显的应用 XXL-JOB 性能,咱们还能够在后盾治理界面查看工作每次执行的日志等,更多详细资料可参考下文的链接。

四、参考文档

XXL 开源社区

正文完
 0