XXL-JOB 2.3.0 使用概述

XXL-JOB 2.3.0 使用概述,第1张

XXL-JOB 2.3.0 使用概述 XXL-JOB 2.3.0 使用概述 一、xxl-job是什么?

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展

官网:https://www.xuxueli.com/xxl-job/

二、特性
  • 简单:支持通过Web页面对任务进行CRUD *** 作, *** 作简单,一分钟上手;
  • 动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效
  • 注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行,每30秒清理一次注册表中的无效机器。同时,也支持手动录入执行器地址;
  • 失败处理策略:每10秒检测失败任务,报警和重试;
  • 一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行

特性很多,不一一列举

三、本地搭建 1.git上下载xxl-job项目

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

2.导入数据库

官网源码doc下的db文件夹里有任务调度中心需要的数据库

3.修改源码配置

修改xxl-job-admin下的properties文件

  • 修改端口号8080记住需改后的端口号,用于访问任务调度中心

  • 修改数据库连接地址

server.port=8010
...
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
4.新建本地demo项目

导入依赖:

切记导入SpringWeb,不导入可以试试,亲测有效


    org.springframework.boot
    spring-boot-starter-web



    com.xuxueli
    xxl-job-core
    2.3.0

修改properties:

  • 任务调度中心的地址端口和上面修改的端口号要相同
  • 记住xxl.job.executor.appname执行器名
# 服务端口号
server.port=8011
# log config
logging.config=classpath:logback.xml
# 调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"
xxl.job.admin.addresses=http://127.0.0.1:8010/xxl-job-admin
# 执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用。单机部署多个执行器时,注意要配置不同执行器端口
xxl.job.executor.appname=job-test
xxl.job.executor.ip=
xxl.job.executor.port=9998
# 执行器通讯TOKEN,非空时启用
xxl.job.accessToken=
# 执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# 执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效;
xxl.job.executor.logretentiondays=-1

新建logback.xml:




    logback
    

    
        
            %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
        
    

    
        ${log.path}
        
            ${log.path}.%d{yyyy-MM-dd}.zip
        
        
            %date %level [%thread] %logger{36} [%file : %line] %msg%n
            
        
    

    
        
        
    


新建XxlJobConfig:

@ComponentScan(basePackages = "com.cj.xxljobdemo.jobhandler")
@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.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
    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;
    }

}

新建DemoJobHandler执行器:

记住XxlJob任务名

@Component
public class DemoJobHandler {

    
    @XxlJob(value = "demoJobHandler111")
    public void test() {
        // 2.3.0版本获取参数的方式
        // 注意xxl-job统一只接受一个String类型的参数,如果有多个参数,请自定义规则,获取到参数后自行切割
        String param = XxlJobHelper.getJobParam();
        // 打印到日志文件的方式,打印之后的文件,在调度中心的调度日志管理中, *** 作选项下的执行日志可查看到
        XxlJobHelper.log("=====DemoJobHandler===== test XXL-JOB!");
        // 执行结束后返回的方式,同样在执行日志可查看
        XxlJobHelper.handleSuccess(new Date() + "执行成功");
        System.out.println(new Date() + "/1=========");
    }
}

四、如何使用? 1.启动xxl-job-admin服务

访问任务调度中心页面 http://localhost:8010/xxl-job-admin

初始账号密码admin/123456

2.新增执行器

3.新增任务

4.启动任务以后就大功告成了!

五、高级配置 1.避免多台服务器重复调度任务

集群分布式并发环境中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果执行器的名称和执行时间相同,则只有一个节点去执行此任务。

  • FIRST(第一个):固定选择第一个机器;
  • LAST(最后一个):固定选择最后一个机器;
  • ROUND(轮询):轮流执行;
  • RANDOM(随机):随机选择在线的机器;
  • CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
  • LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
  • LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举;
  • FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
  • BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
  • SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;
2.子任务:

每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取),当本任务执行结束并且执行成功时,将会触发子任务ID所对应的任务的一次主动调度。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5672363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存