推广

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

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

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://www.0291.com.cn/post/56942.html

相关文章

网站优化是什么介绍网站优化方式与好处。

网站优化是什么介绍网站优化方式与好处。

网站优化的术语是SEO优化,它是利用搜索引擎的搜索规则来提高当前网站在相关搜索引擎中的自然排名。   一、网站优化的好处  1、发挥企业产品和品牌推广作用   经过SEO优化后,企业网站可以获得更高的排名,可以被更多的潜在客户看到,这有利于产品...

分享全网营销:提升微信商城产品转化的四大技巧。

分享全网营销:提升微信商城产品转化的四大技巧。

微信现在当下已经越来越火爆了,很多企业都在微信公众号都建设了微信商城。但是我们会发现一个问题,那就是微信商城的产品成交率很低,甚至有的微商城直接没有转化。那么今天云裂变就来告诉大伙儿全网营销中四个快速提升微信商城产品转化的! 一、个性化商城定制 个性化的商城就是在建设微商城时,要充分...

品质退款率会清零吗(品质退款率怎么降低)

品质退款率会清零吗(品质退款率怎么降低)

在后台的商家数据浮动是可以被清零的,但在某些平台的数据分析上,依然会被列入数据计算的范畴,也会影响整年的退款率浮动图。...

小编分享保洁开荒服务网络营销推广,保洁开荒服务免费发布信息。

小编分享保洁开荒服务网络营销推广,保洁开荒服务免费发布信息。

不管你是做那个行业的,在做网络推广之前,一定要对自己的产品和行业发展情况有一个非常清晰的认识,根据产品的特性来规划推广渠道。而在互联网进行推广的核心就是引入精准流量从而获取好的转化。目前市面上的推广方法非常多,但是大的渠道主要是围绕这么几个大的平台来做的,搜索引擎系(百度、好搜、搜狗、神马等)、阿里...

极速推广有权重吗,淘宝极速推广有用吗(做权重平台)

极速推广有权重吗,淘宝极速推广有用吗(做权重平台)

如果一个新发布的产品想要迅速成为爆炸,首先要让更多的消费者看到你的产品。加快产品速度将使您的产品在24小时内接触到更多的潜在用户,创造爆炸的周期也将更短。...

教你淘宝客如何在微商网平台推广欧莱雅护肤品。

教你淘宝客如何在微商网平台推广欧莱雅护肤品。

客如何在微商网平台推广欧莱雅?做淘宝客的伙伴需要在各大平台发布天猫或者京东联盟里的产品,今天聚众果微商网给大家分享下淘宝客如何在微商网平台推广欧莱雅护肤品? 首先找到一些可以发布淘客链接的高权重网站,只有高权重才能被收录,收录了才能有点击率从而成交。那么如何去找这样的平台呢?小编...

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

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