推广

SpringBoot集成分布式任务调度xxl-job

iseeyu2年前 (2024-02-21)推广113

0.png

四、SpringBoot集成xxl-job

源码上有示例代码,在xxl-job-executor-samples目录下
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.llh.xxl.job</groupId>
    <artifactId>spring-boot-xxl-job</artifactId>
    <version>1.0.0</version>
    <name>spring-boot-xxl-job</name>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

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

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

application.properties

server.port=8081

xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

xxl.job.accessToken=

xxl.job.executor.appname=xxl-job-executor-sample

xxl.job.executor.address=

xxl.job.executor.ip=

xxl.job.executor.port=9999

xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

xxl.job.executor.logretentiondays=30


XxlJobConfig

package com.llh.xxl.job.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Slf4j
public class XxlJobConfig {

    @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() {
        log.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;
    }
}

SampleXxlJob

package com.llh.xxl.job.job;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit;

@Component
@Slf4j
public class SampleXxlJob {
    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        log.info("开始执行任务,{}", LocalDateTime.now());

        // 模拟执行任务,比如查询所有用户,给用户发送短信
        for (int i = 0; i < 5; i++) {
            log.info("执行任务: " + i);

            // 有关数据库等操作一定要延迟,否则数据库连接资源会瞬间被占满
            TimeUnit.SECONDS.sleep(1);
        }
    }

    /**
     * 2、分片广播任务
     */
    @XxlJob("shardingJobHandler")
    public void shardingJobHandler() throws Exception {

        // 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        log.info("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

        // 业务逻辑
        for (int i = 0; i < shardTotal; i++) {
            if (i == shardIndex) {
                log.info("第 {} 片, 命中分片开始处理", i);
            } else {
                log.info("第 {} 片, 忽略", i);
            }
        }

    }
}

五、测试任务调度

启动Java项目,然后在xxl-job后台新增任务管理,内容如下,主要是对应JobHandler和代码中的注解一致。

1.png
– Cron可以自己去学一下,很简单

  • 高级配置里面可以设置路由策略

启动任务后可以在后台看到任务调度日志,这里是每10秒执行一次。

2.png

六、结语

题可以在评论区留言,我们一起进步!

源码地址:https://github.com/tigerleeli/xiaohuge-blog/tree/master/spring-boot-xxl-job

同步微信公众号(还没正式运营):小虎哥的技术博客

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://0291.com.cn/post/56942.html

相关文章

主打入门级市场,全渠道布局,酷派用三款新机宣告回归

主打入门级市场,全渠道布局,酷派用三款新机宣告回归

2023年4月3日,沉寂数月的酷派手机以“新机三连”的形式和广大消费者们久别重逢。此次,酷派发布的三款手机定位清晰,主攻千元级。通过全的产品布局,辐射全国市场,让广大普通消费者们能够享受到更具性价比、更耐用、更好用的亲民智能机型,用卓越的产品力,向一线奋斗者们致敬。酷派此次...

我来分享移动网站设计的需求和有效性是什么。

我来分享移动网站设计的需求和有效性是什么。

  今天,移动是任何网站的基本要求。除此之外,它还具有重要意义,可以定义哪些组件构成一个强大的移动站点。虽然更多人使用移动设备而不是桌面屏幕,但他们中的许多人仍然使用他们常用的网站 他们仍然不关心是否适合智能手机和平板电脑的小屏幕。   另一方面,高效的移动网站设计必须考虑移动设备和台式计算机之间...

淘宝重点主推短视频功能 整理了6个关于手淘短视频的真相。

淘宝重点主推短视频功能 整理了6个关于手淘短视频的真相。

临近双11,电商圈的朋友应该都或多或少了解到,手淘要做重大改版。目的就是要将淘宝彻底内容化、视频化。短视频成为这次改版,最重要的风向标。 关于淘宝重点主推短视频,有的人看好,觉得这是当下互联网平台抢占用户时间最有力的内容形式。 也有的人不看好,认为淘宝永远也做不成抖音、快手,因为用户根本没...

天猫先用后付什么意思(天猫可以先买后付吗)

天猫先用后付什么意思(天猫可以先买后付吗)

现在有不少品类的品牌商都采用先用后付的模式,这个模式是全新的消费模式,其核心在于以信用为基本依托,消费者可以先进行商品体验,特别是新品,满意后再进行付款。...

健康与财富的关系

今天,我生病了,特别难受,于是才想到了健康与财富的关系。最近有一个词特别火,第一性原理。我想说健康就是人生的第一性。没有健康做铺垫的财富,就像水中花镜中月一样虚幻。所以,想要积累财富,首先第一件事情,就是维持身体的健康。...

优酷视频流量被忽视的营销手段

优酷视频流量被忽视的营销手段

优酷流量是一种常常被草根忽视的营销手段。做的好,可以获得非常高的流量,就算做的不好,也有不错的收益。它的原理是,将植入视频的片头或片尾(或打广告水印),当人们打开视频时,就会看到你的广告。 在文章一开始,请各位看一下我做的样板。这个视频的内容是广告小短片+原内容,目前浏览量已经到达1万------...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片