XXL-JOB的使用

xxl:许雪里 —美团大神
原项目中的需求是通过xxl-job定时计算用户行为得出文章热度,再根据文章热度排名,需求不复杂,所以这篇文章重点讲解ruoyi cloud plus中给出的xxl-job的几个实例。

启动服务
xxl-job服务端在ruoyi cloud plus中内置,直接配置好数据库启动即可:


找到ruoyi-job微服务
ruoyi cloud plus中已经包含了一个用于学习的ruoyi-job微服务:


配置多实例启动
先不要直接启动,简单修改下配置:

新建了一个执行器,这个主要是为了测试,用原来的也可以。
port原来是写死的,这里改成参数启动,默认9901
ruoyi-job的application.yml中的server.port也改成参数的:

这样一来就可以多实例启动了


引入依赖
pom中引入:


源码中的例子
SampleService.java,里面有五个例子:
1、简单任务示例 2、分片广播任务 3、命令行任务 4、跨平台Http任务 5、生命周期任务示例

简单任务示例
通过例子,会发现使用起来很方便,直接在需要配置任务的方法上方加入注解即可:

控制台中新增任务:


注意和注解中的名字对应,路由那里我选择的是轮询,可通过多实例启动看效果。


启动服务:


分片广播任务
我把原来的例子改成了黑马教程中的例子,需求是通过两个实例,把一个从1打印到10000的任务分成两个片区执行,原理就是通过取模运算,和shardIndex一致后,执行任务即可,shardIndex和执行器管理的OnLine机器地址中的最前面的序号一致:


/**
     * 2、分片广播任务
     */
    @XxlJob("shardingJobHandler")
    public void shardingJobHandler(){
        //分片的参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        //业务逻辑
        int i = 0;
        List<Integer> list = getList();
        for (Integer integer : list) {
            if(integer % shardTotal == shardIndex){
                log.info("当前第"+shardIndex+"分片执行了,任务项为:"+integer);
                i++;
            }
        }
        log.info("执行完成,任务总量:10000,本分片共执行了 {} 次",i);
    }

    public List<Integer> getList(){
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            list.add(i);
        }
        return list;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
执行一次即可,我新建了分片执行器,需要选择正确,配置中也要保证一致:
如果没有这个执行器,可以新建一个:


执行结果:分成两片,一个尾号是单数,一个尾号是双数:

命令行任务
该任务可以运行参数中的一个执行文件
比如,在c盘根目录创建了一个叫做a.bat的可执行文件:
c:/a.bat

@echo  off
start https://www.baidu.com/s?wd=xxljob
1
2
执行后,会打开百度:

跨平台Http任务
该任务可以接收一个跨平台的http数据或者传输数据,三个参数:url(不可为空) method(不可为空) data(可选)
执行一次即可

参数:

url: https://www.sina.com.cn
method: get
data: content
1
2
3


接收到的数据,新浪首页的数据,你给人家输出了好多啊!

方法中把返回数据存到了XxlJobHelper.log中,控制台看不到,想看需要手打sysout或者log.info

XxlJobHelper.log的数据可以通过调度日志看到

通过操作中的执行日志可以看明细,这里数据太大了,出不来了


换个参数,把url换成已经停服的北美新浪:
url: http://www.sina.com
method: get

这样就出来了!

生命周期任务
任务初始化与销毁时,支持自定义相关逻辑;

@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")
    public void demoJobHandler2() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
}
public void init(){
    logger.info("init");
}
public void destroy(){
    logger.info("destory");
}
1
2
3
4
5
6
7
8
9
10
第二阶段完成。
————————————————
版权声明:本文为CSDN博主「zhaozhiqiang1981」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaozhiqiang1981/article/details/129240377

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值