XXL-JOB 快速上手入门

项目地址:https://gitee.com/xuxueli0323/xxl-job

一、源码下载及准备工作

点击克隆下载
在这里插入图片描述

下载完成后得到文件如下
在这里插入图片描述

用IDEA打开项目后
在这里插入图片描述

找到sql文件,执行该数据库脚本
在这里插入图片描述

得到如下数据库
在这里插入图片描述

进入配置文件application.properties修改为自己的数据库连接
在这里插入图片描述

启动admin项目
在这里插入图片描述
在这里插入图片描述

浏览器打开链接http://127.0.0.1:8080/xxl-job-admin/jobinfo
初始账号为admin,初始密码为123456
进入管理界面后可修改密码
在这里插入图片描述

二、SpringBoot项目集成XXL-JOB

打开自己的项目,导入xxl-job依赖

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

在配置文件中新增xxl-job的配置

server.port=8088
### 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=default_token

### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### 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=127.0.0.1
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

在这里插入图片描述
在这里插入图片描述

然后新建一个config配置类
在这里插入图片描述

写入下述配置信息(将配置文件中的配置读取)

@Configuration
public class XxlJobConfig {

    @Value("${xxl.job.admin.addresses}")
    private String addresses;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @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.executor.logpath}")
    private String logPath;
    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;

    @Bean
    public XxlJobSpringExecutor xxlJobSpringExecutor(){
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(addresses);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
}

新建一个定时任务job
在这里插入图片描述

写一个XxlJobDemo

@Component
public class XxlJobDemo {

    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception{
        System.out.println("执行定时任务时间" + new Date());
    }
}

在这里插入图片描述

然后启动该项目,打开任务调度中心http://127.0.0.1:8080/xxl-job-admin/
在这里插入图片描述

可以看到已经上线了一个执行器
接下来就在该控制中心新建定时任务
任务管理->新增 填表(带红色星号必填,注意JobHandler就是@XxlJob("demoJobHandler")中的demoJobHandler,相当于url用于调度中心定位该任务)
在这里插入图片描述

点击启动,任务就会每隔5秒被执行一次,如果点击执行一次那么仅触发一次
在这里插入图片描述

可以看到任务已被触发执行
在这里插入图片描述

点击停止,则停止任务执行
在这里插入图片描述

至此,xxl-job的基础用法介绍完毕!

三、集群设置(选修)

点击该项目,克隆一个配置出来搭建本地集群
在这里插入图片描述

修改配置项和服务名称
在这里插入图片描述
-Dserver.port=8089 -Dxxl.job.executor.port=9999

点击,新增SpringBoot项目
在这里插入图片描述
在这里插入图片描述

假如,有一个任务,需要定时给下述用户发送邮件
在这里插入图片描述
搭建集群后,如何让两个服务合作完成,各自完成一半的工作量?
xxl-job中的XxlJobHelper.getShardIndex()XxlJobHelper.getShardTotal()两个方法为每个机器提供了自身的索引编号和总的集群数量。

@XxlJob("sendMsgHandler")
public void sendMsgHandler() throws Exception{
    long startTime = System.currentTimeMillis();
    userMobilePlanService.sendMsgHandler();
    System.out.println("任务耗时:" + (System.currentTimeMillis()-startTime) + "毫秒");
}
@Override
public void sendMsgHandler() {
    int shardIndex = XxlJobHelper.getShardIndex();
    int shardTotal = XxlJobHelper.getShardTotal();
    System.out.println("分片的总数:" + shardTotal + ",分片的索引:" + shardIndex);

    QueryWrapper<UserMobilePlan> wrapper = new QueryWrapper<>();

    // 内存分流
    List<UserMobilePlan> userMobilePlans = userMobilePlanMapper.selectList(null);
    System.out.println("任务开始时间:" + new Date() + " 任务处理数量:" + userMobilePlans.size());
    userMobilePlans.forEach(item -> {
        if(item.getId() % shardTotal == shardIndex){
            try{
                // 模拟发送短信动作
                TimeUnit.MILLISECONDS.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });
    System.out.println("任务结束时间:" + new Date());
}

在这里插入图片描述

启动这两个服务
在这里插入图片描述

管理界面可看到两个在线服务
在这里插入图片描述

新增一个定时任务执行器
在这里插入图片描述

可以看到两个服务各处理了一半的工作量
在这里插入图片描述
在这里插入图片描述

假如重新编辑,不使用分片广播策略
在这里插入图片描述

可以看到一个服务器处理了所有的数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值