xxl-job定时器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lnazj/article/details/82563643

最近项目使用了xxl-job 定时器来处理一些定时任务的操作,XXL-JOB是一个轻量级分布式任务调度框架,有可视化界面,便于操作,现在总结一下具体使用方式

一:配置调度中心

下载源码:https://github.com/xuxueli/xxl-job
这里写图片描述
1.初始化数据库
“调度数据库初始化SQL脚本” 位置为:
/xxl-job/doc/db/tables_xxl_job.sql

2.编译源码,部署调度中心项目
解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可,源码结构如下:

xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
:xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用,推荐这种方式;
:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;
:xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;
:xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;

3.配置部署“调度中心”
调度中心项目:xxl-job-admin
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

3.1 配置文件
调度中心配置文件地址:
/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties
调度中心配置内容说明:

调度中心JDBC链接:链接地址请保持和所创建的调度数据库的地址一致
xxl.job.db.driverClass=com.mysql.jdbc.Driver
xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
xxl.job.db.user=root
xxl.job.db.password=root_pwd

报警邮箱
xxl.job.mail.host=smtp.163.com
xxl.job.mail.port=25
[email protected]
xxl.job.mail.password=asdfzxcv
[email protected]
xxl.job.mail.sendNick=《任务调度平台XXL-JOB》

登录账号
xxl.job.login.username=admin
xxl.job.login.password=123456

调度中心通讯TOKEN,非空时启用
xxl.job.accessToken=

调度中心国际化设置,默认为中文版本,值设置为“en”时切换为英文版本
xxl.job.i18n=

3.2如果已经正确进行上述配置,可将项目编译打war包并部署到tomcat中。 调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)登录后界面如下:
这里写图片描述
至此“调度中心”项目已经部署成功。

二:Maven依赖
在项目的pom.xml 配置文件添加依赖

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

三:执行器配置
1.在项目的配置文件中添加

xxl: 
  job: 
  //xxl-job 调度中心地址,需要跟我们在一3.2中部署的调度中心地址一致
    admin:
      addresses: http://192.168.22.168:8080/xxl-job-admin

   //执行器的appname,地址端口
    executor:
      appname: integral-zentao-job
      ip: 192.168.22.168
      port: 9999
      logpath: /data/xxl-job/jobhandler
      logretentiondays: -1
    accessToken:    

2.添加XxlJobConfig配置类

package com.xxl.job.executor.core.config;

import com.xxl.job.core.executor.XxlJobExecutor;
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.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job config
 *
 * @author xuxueli 2017-04-28
 */
@Configuration
@ComponentScan(basePackages = "com.xxl.job.executor.service.jobhandler")
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(initMethod = "start", destroyMethod = "destroy")
    public XxlJobExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
        xxlJobExecutor.setAdminAddresses(adminAddresses);
        xxlJobExecutor.setAppName(appName);
        xxlJobExecutor.setIp(ip);
        xxlJobExecutor.setPort(port);
        xxlJobExecutor.setAccessToken(accessToken);
        xxlJobExecutor.setLogPath(logPath);
        xxlJobExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobExecutor;
    }

}

四.在项目中创建任务
- 1、继承”IJobHandler”:“com.xxl.job.core.handler.IJobHandler”;
- 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
- 3、注册到执行器工厂:添加“@JobHandler(value=”自定义jobhandler名称”)”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。

@JobHandler(value="jobtest")
@Component
public class job_test extends IJobHandler {
    @Override
    public ReturnT<String> execute(String s) throws Exception {
         try {
            System.out.println("测试~~~");
            /*测试数据*/
            return SUCCESS;
        } catch (Exception e){
            e.printStackTrace();
            return FAIL;
        }
    }
}

五.使用调度中心

5.1执行器管理
这里写图片描述
这里写图片描述

注意:当是自动注册的时候,会根据appname寻找执行器机器地址,此时Appname 必须和application.properties 执行器配置文件中appname 保持一致.
如果手动注册,appname 可以不一致,但是机器地址必须和xxl.job.executor.ip 保持一致.

xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=192.168.21.168
xxl.job.executor.port=9999

执行器属性说明
AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;
名称: 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;
排序: 执行器的排序, 系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表;
注册方式:调度中心获取执行器地址的方式;
自动注册:执行器自动进行执行器注册,调度中心通过底层注册表可以动态发现执行器机器地址;
手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;
机器地址:”注册方式”为”手动录入”时有效,支持人工维护执行器的地址信息;

5.2 任务管理
这里写图片描述

点击新增任务后创建任务
jobhandler里的内容需要与任务代码中@jobhandler的value 保持一致.
这里写图片描述

5.3日志管理
这里写图片描述
调度时间:”调度中心”触发本次调度并向”执行器”发送任务执行信号的时间;
调度结果:”调度中心”触发本次调度的结果,200表示成功,500或其他表示失败;
调度备注:”调度中心”触发本次调度的日志信息;
执行器地址:本次任务执行的机器地址
运行模式:触发调度时任务的运行模式,运行模式可参考章节 “三、任务详解”;
任务参数:本地任务执行的入参
执行时间:”执行器”中本次任务执行结束后回调的时间;

猜你喜欢

转载自blog.csdn.net/lnazj/article/details/82563643