redisson常用APi-Example

Redisson分布式编程示例:对象存储、数字操作与锁机制
本文介绍了如何使用Redisson进行分布式编程,包括存储对象、数字操作(如计数器、限流)、RMap和集合的使用,以及分布式锁(可重入锁、公平锁和读写锁)的实现和操作示例。

中文文档目录

redisson中文文档目录

分布式对象

package com.example.redissondemo.test;

import com.example.redissondemo.RedissonDemoApplication;
import com.example.redissondemo.test.domain.Order;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.redisson.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * 测试学习redisson 对象 api
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = RedissonDemoApplication.class)
@Slf4j
public class RedissonObjectExampleTests {

    @Autowired
    private RedissonClient redissonClient;


    /**
     * 直接存储对象,无需强制类型转换 (支持异步操作)
     */
    @Test
    public void bucketTest() {
        RBucket<Order> orderBucket = redissonClient.getBucket("myOrder");
        System.out.println("init : " + orderBucket.get());

        // 设置
        orderBucket.set(new Order(10L, "OR001"), 1, TimeUnit.MINUTES);
        System.out.println("设置 : " + orderBucket.get());

        // 删除
        System.out.println("删除状态:" + orderBucket.delete() + "当前" + orderBucket.get());

        // 重新设置
        orderBucket.set(new Order(10L, "OR001"), 1, TimeUnit.MINUTES);
        System.out.println("重新设置 : " + orderBucket.get());

        // 如果是or1 改为or2
        orderBucket.compareAndSet(new Order(10L, "OR001"), new Order(10L, "OR002"));
        System.out.println("存在or1 改为or2 : " + orderBucket.get());

        // 如果是or1 改为or3
        orderBucket.compareAndSet(new Order(10L, "OR001"), new Order(10L, "OR003"));
        System.out.println("存在or1 改为or3 : " + orderBucket.get());

        // 存在bucket对象就修改为OR3
        orderBucket.setIfExists(new Order(10L, "OR003"), 1, TimeUnit.MINUTES);
        System.out.println("存在bucket对象就修改为OR3 : " + orderBucket.get());

        orderBucket.isExists();

        orderBucket.delete();

    }

    /**
     * 数字操作,计数器 原子类操作 等等 (支持异步操作)
     *
     * @throws ExecutionException
     * @throws InterruptedException
     * @throws TimeoutException
     */
    @Test
    public void numberTest() throws ExecutionException, InterruptedException, TimeoutException {
        // 存在精度丢失
        RDoubleAdder doubleAdder = redissonClient.getDoubleAdder("doubleAdder");
        doubleAdder.add(1.9999);
        doubleAdder.add(2.0001);
        doubleAdder.add(3.0000000000000001);
        RFuture<Double> future = doubleAdder.sumAsync();
        Double sum = future.get(1000, TimeUnit.MILLISECONDS);
        System.out.println(sum);
        doubleAdder.delete();

        RLongAdder longAdder = redissonClient.getLongAdder("longAdder");
        longAdder.add(100);
        longAdder.increment();
        longAdder.increment();
        long longSum = longAdder.sum();
        System.out.println(longSum);
        longAdder.delete();
        longAdder.destroy();

        // 当不再使用整长型累加器对象的时候应该自行手动销毁,如果Redisson对象被关闭(shutdown)了,则不用手动销毁


        // 支持CAS设置
        RAtomicDouble atomicDouble = redissonClient.getAtomicDouble("atoDouble");
        double v = atomicDouble.incrementAndGet();
        System.out.println(v);

        atomicDouble.compareAndSet(v, 2.0);
        System.out.println(atomicDouble.get());
        atomicDouble.delete();

        RLongAdder atoLong = redissonClient.getLongAdder("atoLong");
        atoLong.increment();
        System.out.println(atoLong.sum());
        atoLong.delete();
    }

    /**
     * 限流*
     */
    @Test
    public void rateLimiterTest() {
        RRateLimiter limiter = redissonClient.getRateLimiter("orderImport");
        // 初始化
        // 最大流速 = 每1秒钟产生10个令牌
        // tryAcquire 尝试获取令牌
        // 如果令牌足够 则扣减令牌 返回true
        // 如果令牌不够 则不扣减  返回false

        // acquire 直接获取令牌 如果获取不到令牌 就阻塞等新的令牌产生
        // 如果令牌足够 则扣减对应的令牌
        // 如果令牌不够 则扣减令牌数量为0
        limiter.trySetRate(RateType.OVERALL, 10, 1, RateIntervalUnit.HOURS);

        boolean b = limiter.tryAcquire(1);
        System.out.println(" tryAcquire 1  availablePermits : " + limiter.availablePermits());
        b = limiter.tryAcquire(10);
        System.out.println(" tryAcquire 10 availablePermits : " + limiter.availablePermits());

        limiter.acquire(3);
        System.out.println("acquire 3 availablePermits : " + limiter.availablePermits());

        new Thread(() -> {
            limiter.acquire(2);
            System.out.println(" acquire 2 availablePermits : " + limiter.availablePermits());
        }).start();
        limiter.acquire(7);
        System.out.println(" acquire 7 availablePermits : " + limiter.availablePermits());

//        long start = System.currentTimeMillis();
        limiter.acquire(1);
//        System.out.println(System.currentTimeMillis() - start);
        System.out.println(" acquire 1 availablePermits : " + limiter.availablePermits());

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        limiter.acquire(7);
        System.out.println(" acquire 7 availablePermits : " + limiter.availablePermits());

        limiter.delete();
    }


    @Test
    public void mapDemo() {
//        RMap<String, String> test = redissonClient.getMap("test", MapOptions.defaults());
//        test.put("testKey", "testValue");
//        test.fastPut("fastTestKey", "testValue");
//        String testKey = test.get("testKey");
//        test.remove("testKey");
//        test.get("testKey");

        RBucket<MyBucket> myBucket = redissonClient.getBucket("myBucket");
        myBucket.set(new MyBucket(), 1, TimeUnit.MINUTES);
        System.out.println(myBucket.get());

        myBucket.rename("myBucket1");
        RBucket<MyBucket> myBucket1 = redissonClient.getBucket("myBucket");
        System.out.println(myBucket1.get());
        RBucket<MyBucket> myBucket2 = redissonClient.getBucket("myBucket1");
        System.out.println(myBucket2.get());

    }

    @Data
    public static class MyBucket {
        private String name = "test";
        private int age = 10;
    }


}

分布式集合

package com.example.redissondemo.test;

import com.alibaba.fastjson.JSONObject;
import com.example.redissondemo.RedissonDemoApplication;
import com.example.redissondemo.test.domain.Order;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.redisson.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

/**
 * 测试学习redisson 集合 api
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = RedissonDemoApplication.class)
@Slf4j
public class RedissonCollectionsExampleTests {

    @Autowired
    private RedissonClient redissonClient;


    /**
     *  Java对象实现了java.util.concurrent.ConcurrentMap接口和java.util.Map接口。与HashMap不同的是,RMap保持了元素的插入顺序。
     *  还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口
     *
     */
    @Test
    public void mapTest() throws ExecutionException, InterruptedException {
        String key = "user";
        RMap<String, String> map = redissonClient.getMap(key);
        map.put("name", "zhangsan");
        map.put("age", "18");

        String name = map.get("name");
        System.out.println ("user name : " + name);

        boolean b = map.containsKey("age");
        System.out.println("has age ? : " + b);

        Set<Map.Entry<String, String>> entries = map.entrySet();
        System.out.println(Arrays.toString(entries.toArray()));
        map.remove("age");

        // fastPut 和 put 的区别就是 put会发回之前该索引位置的值(如果存在) 而fastPut 只会返回插入成功与否
        map.fastPut("like", "eat");
        System.out.println(JSONObject.toJSONString(map));
        // 同理
        map.fastRemove("like");

        // 异步操作 提高操作效率
        RFuture<String> putAsyncFuture = map.putAsync("321","");
        RFuture<Boolean> booleanRFuture = map.fastPutAsync("123", "");

        putAsyncFuture.get();
        booleanRFuture.get();
        System.out.println(JSONObject.toJSONString(map));
    }

    /**
     * 多值映射 一对多映射关系的存储
     * 基于list  set
     */
    @Test
    public void myMultimapTest(){
        // 基于set 基于Set的Multimap不允许一个字段值包含有重复的元素。
        RSetMultimap<String, String> map = redissonClient.getSetMultimap("RSetMultimap");
        map.put("age", "19");
        map.put("age", "20");
        map.put("name", "zhangsan");

        Set<String> allValues = map.get("age");
        System.out.println(allValues);
        List<String> newValues = Arrays.asList("17", "16", "15");
        Set<String> oldValues = map.replaceValues("age", newValues);
        System.out.println(oldValues);
        Set<String> removedValues = map.removeAll("age");
        System.out.println(removedValues);

        map.put("carCount", "2");
        Set<Map.Entry<String, String>> entries = map.entries();
        System.out.println(JSONObject.toJSONString(entries));
        map.delete();

        // 基于list 同理 基于List的Multimap在保持插入顺序的同时允许一个字段下包含重复的元素。
        redissonClient.getListMultimap("myListMultimap");


        //  Multimap对象的淘汰机制是通过不同的接口来实现的。它们是RSetMultimapCache接口和RListMultimapCache接口,分别对应的是Set和List的Multimaps。
        RListMultimapCache<Object, Object> myListMultimap2 = redissonClient.getListMultimapCache("myListMultimap2");
        myListMultimap2.expireKey("2", 10, TimeUnit.MINUTES);

        RSetMultimapCache<Object, Object> getSetMultimapCache = redissonClient.getSetMultimapCache("getSetMultimapCache");
        getSetMultimapCache.expireKey("2", 10, TimeUnit.MINUTES);

    }

    /**
     * 基于Redis的Redisson的分布式Set结构的RSet Java对象实现了java.util.Set接口。
     */
    @Test
    public void baseSet(){
        RSet<Order> set1 = redissonClient.getSet("anySet");
        set1.add(new Order());
        set1.remove(new Order());


        // 基于Redis的Redisson的分布式RSetCache Java对象在基于RSet的前提下实现了针对单个元素的淘汰机制
        /**
         * 目前的Redis自身并不支持Set当中的元素淘汰,因此所有过期元素都是通过org.redisson.EvictionScheduler实例来实现定期清理的。
         * 为了保证资源的有效利用,每次运行最多清理100个过期元素。
         * 任务的启动时间将根据上次实际清理数量自动调整,间隔时间趋于1秒到2小时之间。
         * 比如该次清理时删除了100条元素,那么下次执行清理的时间将在1秒以后(最小间隔时间)。
         * 一旦该次清理数量少于上次清理数量,时间间隔将增加1.5倍。
         */

        RSetCache<Object> set2 = redissonClient.getSetCache("anySet2");
        // ttl = 10 seconds
        set2.add(new Order(), 10, TimeUnit.SECONDS);


        // 基于Redis的Redisson的分布式RSortedSet Java对象实现了java.util.SortedSet接口。在保证元素唯一性的前提下,通过比较器(Comparator)接口实现了对元素的排序。
        RSortedSet<Integer> set = redissonClient.getSortedSet("anySet");
        set.trySetComparator(Comparator.comparingInt(a -> a)); // 配置元素比较器
        set.add(3);
        set.add(1);
        set.add(2);

        set.removeAsync(0);
        set.addAsync(5);
    }


    @Test
    public void baseListAndQueue(){
        // 基于Redis的Redisson分布式列表(List)结构的RList Java对象在实现了java.util.List接口的同时,确保了元素插入时的顺序。
        RList<Order> list = redissonClient.getList("anyList");
        list.add(new Order());
        Order order = list.get(0);
        list.remove(new Order());


        // 队列
        RQueue<Order> queue1 = redissonClient.getQueue("anyQueue");
        // 双端队列(Deque
        RDeque<Order> queue2 = redissonClient.getDeque("anyDeque");
        // 阻塞队列(Blocking Queue)
        RBlockingQueue<Order> queue3= redissonClient.getBlockingQueue("anyQueue");
        // 有界阻塞队列(Bounded Blocking Queue)
        RBoundedBlockingQueue<Order> queue4 = redissonClient.getBoundedBlockingQueue("anyQueue");

        // 延迟队列(Delayed Queue)
        // 基于Redis的Redisson分布式延迟队列(Delayed Queue)结构的RDelayedQueue Java对象在实现了RQueue接口的基础上提供了向队列按要求延迟添加项目的功能。
        // 该功能可以用来实现消息传送延迟按几何增长或几何衰减的发送策略。
        RDelayedQueue<Order> delayedQueue = redissonClient.getDelayedQueue(queue1);

        // 优先队列(Priority Queue)
        RPriorityQueue<Integer> queue = redissonClient.getPriorityQueue("anyQueue");

    }

}

分布式锁

redisson分布式锁学习

private void redissonDoc() throws InterruptedException {
    //1. 普通的可重入锁
    RLock lock = redissonClient.getLock("generalLock");

    // 拿锁失败时会不停的重试
    // 具有Watch Dog 自动延期机制 默认续30s 每隔30/3=10 秒续到30s
    lock.lock();

    // 尝试拿锁10s后停止重试,返回false
    // 具有Watch Dog 自动延期机制 默认续30s
    boolean res1 = lock.tryLock(10, TimeUnit.SECONDS);

    // 拿锁失败时会不停的重试
    // 没有Watch Dog ,10s后自动释放
    lock.lock(10, TimeUnit.SECONDS);

    // 尝试拿锁100s后停止重试,返回false
    // 没有Watch Dog ,10s后自动释放
    boolean res2 = lock.tryLock(100, 10, TimeUnit.SECONDS);

    //2. 公平锁 保证 Redisson 客户端线程将以其请求的顺序获得锁
    RLock fairLock = redissonClient.getFairLock("fairLock");

    //3. 读写锁 没错与JDK中ReentrantLock的读写锁效果一样
    RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("readWriteLock");
    readWriteLock.readLock().lock();
    readWriteLock.writeLock().lock();
}

<?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.bingosite</groupId> <artifactId>bs-system</artifactId> <version>2.2.2</version> <description> bs-system系统模块 </description> <properties> <revision>2.2.2</revision> <module.revision>2.2.2-SNAPSHOT</module.revision> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>17</java.version> <spring-cloud.version>2023.0.3</spring-cloud.version> <spring-cloud-alibaba.version>2023.0.1.2</spring-cloud-alibaba.version> <spring-boot.version>3.2.11</spring-boot.version> <lombok.version>1.18.34</lombok.version> <mapstruct-plus.version>1.4.5</mapstruct-plus.version> <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version> <!-- 插件版本 --> <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> <maven-war-plugin.version>3.2.2</maven-war-plugin.version> <maven-compiler-plugin.verison>3.11.0</maven-compiler-plugin.verison> <maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version> <flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version> <hutool.version>5.8.31</hutool.version> <redisson.version>3.37.0</redisson.version> <lock4j.version>2.2.7</lock4j.version> <dubbo.version>3.2.14</dubbo.version> <dubbo-registry-eureka.version>2.7.23</dubbo-registry-eureka.version> <!-- 单独指定eureka注册中心版本 --> <!-- 添加Eureka客户端依赖版本 --> <eureka-client.version>1.10.17</eureka-client.version> <swagger.core.version>2.2.22</swagger.core.version> <easyexcel.version>4.0.3</easyexcel.version> <!-- 离线IP地址定位库 --> <ip2region.version>2.7.0</ip2region.version> <springdoc.version>2.6.0</springdoc.version> <mybatis-plus.version>3.5.8</mybatis-plus.version> <mybatis.version>3.5.16</mybatis.version> <p6spy.version>3.9.1</p6spy.version> <satoken.version>1.39.0</satoken.version> <therapi-javadoc.version>0.15.0</therapi-javadoc.version> <dynamic-ds.version>4.3.1</dynamic-ds.version> <bouncycastle.version>1.76</bouncycastle.version> <!-- OSS 配置 --> <aws.sdk.version>2.28.22</aws.sdk.version> <aws.crt.version>0.31.3</aws.crt.version> <justauth.version>1.16.6</justauth.version> <!-- SMS 配置 --> <sms4j.version>3.3.3</sms4j.version> <fastjson.version>1.2.83</fastjson.version> <project.lib.path>${pom.basedir}/src/main/resources/lib</project.lib.path> </properties> <dependencyManagement> <dependencies> <!-- SpringCloud 微服务 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringCloud Alibaba 微服务 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot 依赖配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- hutool 的依赖配置--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-bom</artifactId> <version>${hutool.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>io.swagger.core.v3</groupId> <artifactId>swagger-annotations</artifactId> <version>${swagger.core.version}</version> </dependency> <dependency> <groupId>io.github.linpeilie</groupId> <artifactId>mapstruct-plus-spring-boot-starter</artifactId> <version>${mapstruct-plus.version}</version> </dependency> <!-- 离线IP地址定位库 ip2region --> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>${ip2region.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>${easyexcel.version}</version> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> <version>${springdoc.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-annotation</artifactId> <version>${mybatis-plus.version}</version> </dependency> <!-- sql性能分析插件 --> <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>${p6spy.version}</version> </dependency> <!-- AWS SDK for Java 2.x --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>${aws.sdk.version}</version> </dependency> <!-- 使用AWS基于 CRT 的 S3 客户端 --> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>${aws.crt.version}</version> </dependency> <!-- 基于 AWS CRT 的 S3 客户端的性能增强的 S3 传输管理器 --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3-transfer-manager</artifactId> <version>${aws.sdk.version}</version> </dependency> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-core</artifactId> <version>${satoken.version}</version> </dependency> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot3-starter</artifactId> <version>${satoken.version}</version> </dependency> <!--redisson--> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>${redisson.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>lock4j-redisson-spring-boot-starter</artifactId> <version>${lock4j.version}</version> </dependency> <dependency> <groupId>com.github.therapi</groupId> <artifactId>therapi-runtime-javadoc</artifactId> <version>${therapi-javadoc.version}</version> </dependency> <!-- 加密包引入 --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15to18</artifactId> <version>${bouncycastle.version}</version> </dependency> <!-- JustAuth 的依赖配置--> <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> <version>${justauth.version}</version> </dependency> <!--短信sms4j--> <dependency> <groupId>org.dromara.sms4j</groupId> <artifactId>sms4j-spring-boot-starter</artifactId> <version>${sms4j.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>5.1.0</version> </dependency> <!-- 使用BOM统一管理Dubbo版本 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>4.1.3</version> </dependency> <!-- 单独配置eureka注册中心依赖 - 增强排除规则 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-eureka</artifactId> <version>${dubbo-registry-eureka.version}</version> <exclusions> <!-- 排除所有与Spring相关的依赖 --> <exclusion> <groupId>org.springframework</groupId> <artifactId>*</artifactId> </exclusion> <exclusion> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-api</artifactId> </exclusion> <exclusion> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-common</artifactId> </exclusion> <exclusion> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-config-api</artifactId> </exclusion> </exclusions> </dependency> <!-- Eureka客户端依赖 --> <dependency> <groupId>com.netflix.eureka</groupId> <artifactId>eureka-client</artifactId> <version>${eureka-client.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- 添加Spring beans依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-core</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-dubbo</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-dubbo-${revision}.jar</systemPath> </dependency> <!-- BingoSite Common Log --> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-log</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-log-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-satoken</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-satoken-${revision}.jar</systemPath> </dependency> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-core</artifactId> </dependency> <!-- Sa-Token 整合 jwt --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-jwt</artifactId> <version>${satoken.version}</version> </dependency> <!-- BingoSite Common Redis--> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-redis</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-redis-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-core</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-core-${revision}.jar</systemPath> </dependency> <!-- Spring框架基本的核心工具 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <!-- SpringWeb模块 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <!-- Hibernate Validator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--常用工具类 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!-- servlet包 --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> </dependency> <dependency> <groupId>io.swagger.core.v3</groupId> <artifactId>swagger-annotations</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-http</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-extra</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- 自动生成YML配置关联JSON文件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>io.github.linpeilie</groupId> <artifactId>mapstruct-plus-spring-boot-starter</artifactId> </dependency> <!-- 离线IP地址定位库 --> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> </dependency> <!--redisson--> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>lock4j-redisson-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-json</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-json-${revision}.jar</systemPath> </dependency> <!-- JSON工具类 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-excel</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-excel-${revision}.jar</systemPath> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-dict</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-dict-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-doc</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-doc-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> </dependency> <dependency> <groupId>com.github.therapi</groupId> <artifactId>therapi-runtime-javadoc</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-web</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-web-${revision}.jar</systemPath> </dependency> <!-- SpringBoot Web容器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <!-- web 容器使用 undertow 性能更强 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency> <!-- SpringBoot Actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-metrics</artifactId> <version>2.7.6</version> <exclusions> <exclusion> <groupId>net.dreamlu</groupId> <artifactId>mica-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-core</artifactId> <version>2.7.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-mybatis</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-mybatis-${revision}.jar</systemPath> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> </dependency> <!-- sql性能分析插件 --> <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> </dependency> <!-- Dynamic DataSource --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot3-starter</artifactId> <version>${dynamic-ds.version}</version> </dependency> <!-- Mysql Connector --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> </dependency> <!-- Dubbo核心依赖 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Dubbo Spring适配器 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-config-spring</artifactId> <version>${dubbo.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-metadata-report-redis</artifactId> <exclusions> <exclusion> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-eureka</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>5.1.0</version> </dependency> <!-- Sa-Token 整合 Dubbo --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-dubbo3</artifactId> <version>${satoken.version}</version> <exclusions> <exclusion> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> </dependency> <!-- <dependency>--> <!-- <groupId>org.bingosite</groupId>--> <!-- <artifactId>bs-common-seata</artifactId>--> <!-- <version>${revision}</version>--> <!-- </dependency>--> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-idempotent</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-idempotent-${revision}.jar</systemPath> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-crypto</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-tenant</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-tenant-${revision}.jar</systemPath> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-security</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-security-${revision}.jar</systemPath> </dependency> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot3-starter</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-translation</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-translation-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-sensitive</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-sensitive-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-encrypt</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-encrypt-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15to18</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-oss</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-oss-${revision}.jar</systemPath> </dependency> <!-- AWS SDK for Java 2.x --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <exclusions> <!-- 将基于 Netty 的 HTTP 客户端从类路径中移除 --> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>netty-nio-client</artifactId> </exclusion> <!-- 将基于 CRT 的 HTTP 客户端从类路径中移除 --> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-crt-client</artifactId> </exclusion> <!-- 将基于 Apache 的 HTTP 客户端从类路径中移除 --> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </exclusion> <!-- 将配置基于 URL 连接的 HTTP 客户端从类路径中移除 --> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </exclusion> </exclusions> </dependency> <!-- 使用AWS基于 CRT 的 S3 客户端 --> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> </dependency> <!-- 基于 AWS CRT 的 S3 客户端的性能增强的 S3 传输管理器 --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3-transfer-manager</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-sse</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-sse-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-mail</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-mail-${revision}.jar</systemPath> </dependency> <dependency> <groupId>jakarta.mail</groupId> <artifactId>jakarta.mail-api</artifactId> </dependency> <dependency> <groupId>org.eclipse.angus</groupId> <artifactId>jakarta.mail</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-social</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-social-${revision}.jar</systemPath> </dependency> <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-ratelimiter</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-ratelimiter-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-common-sms</artifactId> <version>${revision}</version> <scope>system</scope> <systemPath>${project.lib.path}/bs-common-sms-${revision}.jar</systemPath> </dependency> <dependency> <groupId>org.dromara.sms4j</groupId> <artifactId>sms4j-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-captcha</artifactId> <version>${hutool.version}</version> </dependency> <!-- BingoSite Api System --> <dependency> <groupId>org.bingosite</groupId> <artifactId>bs-api-system</artifactId> <version>${module.revision}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> </dependencies> <profiles> <profile> <id>dev</id> <properties> <!-- 环境标识,需要与配置文件的名称相对应 --> <profiles.active>dev</profiles.active> <logstash.address>127.0.0.1:4560</logstash.address> </properties> <activation> <!-- 默认环境 --> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <profiles.active>prod</profiles.active> <logstash.address>127.0.0.1:4560</logstash.address> </properties> </profile> </profiles> <build> <!-- <finalName>${project.artifactId}</finalName>--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.verison}</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> <annotationProcessorPaths> <path> <groupId>com.github.therapi</groupId> <artifactId>therapi-runtime-javadoc-scribe</artifactId> <version>0.15.0</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> <path> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>${spring-boot.version}</version> </path> <path> <groupId>io.github.linpeilie</groupId> <artifactId>mapstruct-plus-processor</artifactId> <version>${mapstruct-plus.version}</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>${mapstruct-plus.lombok.version}</version> </path> </annotationProcessorPaths> <compilerArgs> <arg>-parameters</arg> </compilerArgs> </configuration> </plugin> <!-- 单元测试使用 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin.version}</version> <configuration> <argLine>-Dfile.encoding=UTF-8</argLine> <!-- 根据打包环境执行对应的@Tag测试方法 --> <groups>${profiles.active}</groups> <!-- 排除标签 --> <excludedGroups>exclude</excludedGroups> </configuration> </plugin> <!-- 统一版本号管理 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>flatten-maven-plugin</artifactId> <version>${flatten-maven-plugin.version}</version> <configuration> <updatePomFile>true</updatePomFile> <flattenMode>resolveCiFriendliesOnly</flattenMode> </configuration> <executions> <execution> <id>flatten</id> <phase>process-resources</phase> <goals> <goal>flatten</goal> </goals> </execution> <execution> <id>flatten.clean</id> <phase>clean</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <!-- 关闭过滤 --> <filtering>false</filtering> </resource> <resource> <directory>src/main/webapp/</directory> </resource> <resource> <directory>src/main/resources</directory> <!-- 引入所有 匹配文件进行过滤 --> <includes> <include>application*</include> <include>bootstrap*</include> <include>logback*</include> </includes> <!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 --> <filtering>true</filtering> </resource> </resources> </build> <repositories> <repository> <id>public</id> <name>huawei nexus</name> <url>https://mirrors.huaweicloud.com/repository/maven/</url> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>csvw</id> <url>http://nexus.csvw.com/repository/maven-public/</url> </repository> </repositories> <!-- <pluginRepositories>--> <!-- <pluginRepository>--> <!-- <id>public</id>--> <!-- <name>huawei nexus</name>--> <!-- <url>https://mirrors.huaweicloud.com/repository/maven/</url>--> <!-- <releases>--> <!-- <enabled>true</enabled>--> <!-- </releases>--> <!-- <snapshots>--> <!-- <enabled>false</enabled>--> <!-- </snapshots>--> <!-- </pluginRepository>--> <!-- </pluginRepositories>--> </project> 报 历史记录 avater No such extension org.apache.dubbo.registry.RegistryFactory by name eureka, possible causes:
最新发布
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值