SpringBoot日常:封装redission starter组件

news2024/11/27 20:23:05

文章目录

    • 逻辑实现
      • POM.xml
      • RedissionConfig
      • RedissionProperties
      • RedissionUtils
      • spring.factories
    • 功能测试
      • application.yml配置
      • POM.xml
      • TestController
      • 运行测试

本章内容主要介绍如何通过封装相关的redission连接配置和工具类,最终完成一个通用的redission starter。并且本文还会进行对封装的starter进行引入测试,最终实现想要的效果。
参考文章: SpringBoot日常:自定义实现SpringBoot Starter

逻辑实现

下面直接进入主题,介绍整体用到的文件和逻辑内容。首先需要创建一个maven项目,这一步省略

POM.xml

在pom配置文件中引入自动加载和redssion的依赖

<dependencies>
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson-spring-boot-starter</artifactId>
        <version>3.17.7</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

RedissionConfig

创建一个RedissionConfig的配置连接类,主要是加载相关的redis配置并进行连接

@Configuration
@ConditionalOnClass(Redisson.class)
@EnableConfigurationProperties({RedissionProperties.class})
public class RedissionConfig {

    @Bean
    RedissonClient redissonClient(RedissionProperties redissionProperties) {
        Config config = new Config();
        String prefix = "redis://";
        if (redissionProperties.isSsl()) {
            //加密
            prefix = "rediss://";
        }
        config.useSingleServer()
                .setAddress(prefix+redissionProperties.getHost()+":"+ redissionProperties.getPort())
                .setConnectTimeout(redissionProperties.getTimeOut())
                .setPassword(redissionProperties.getPassword());
        return Redisson.create(config);
    }
}

RedissionProperties

创建一个RedissionProperties的配置类,主要包括一些redis相关的连接配置

@ConfigurationProperties(prefix="xxx.redission")
public class RedissionProperties {

    /**
     * 连接地址
     */
    private String host;

    /**
     * 连接端口号
     */
    private int port;

    /**
     * 认证密码
     */
    private String password;

    /**
     * 超时时间 默认0
     */
    private int timeOut;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getTimeOut() {
        return timeOut;
    }

    public void setTimeOut(int timeOut) {
        this.timeOut = timeOut;
    }

    public boolean isSsl() {
        return isSsl;
    }

    public void setSsl(boolean ssl) {
        isSsl = ssl;
    }

    /**
     * 是否加密 默认不加密 false
     */
    private boolean isSsl;
}

RedissionUtils

创建一个RedissionUtils的工具操作类,该工具类可以方便外部进行数据操作,本工具类并不完善,只有字符串的操作和锁操作,如需其他数据类型的操作,请自行补充

@Component
public final class RedissionUtils {

    @Autowired
    private RedissonClient redissonClient;


    private static final long DEFAULT_GETLOCK_TIMEOUT = 5;


    public void set(String key, String vul) {
        redissonClient.getBucket(key).set(vul);
    }


    public Object get(String key) {
        return redissonClient.getBucket(key).get();
    }


    public String getString(String key) {
        RBucket<String> bucket = redissonClient.getBucket(key);
        return bucket.get();
    }


    public <T> void setAndExpire(String key, T value, long expiredTime) {
        RBucket<T> bucket = redissonClient.getBucket(key);
        bucket.set(value, expiredTime, TimeUnit.SECONDS);
    }

    /**
     * 获取锁
     * @param lockKey
     * @return
     */
    public boolean getLock(String lockKey) {
        RLock rLock = redissonClient.getLock(lockKey);
        try {
            boolean res = rLock.tryLock(DEFAULT_GETLOCK_TIMEOUT,  TimeUnit.SECONDS);
            return res;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //无论如何, 最后都要解锁
            rLock.unlock();
        }
        return false;
    }

    /**
     *
     * @param lockKey 锁的key
     * @param timeOut 获取锁的超时时间
     * @return
     */
    public boolean getLock(String lockKey, long timeOut) {
        RLock rLock = redissonClient.getLock(lockKey);
        try {
            boolean res = rLock.tryLock(timeOut,  TimeUnit.SECONDS);
            return res;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //无论如何, 最后都要解锁
            rLock.unlock();
        }
        return false;
    }

}

spring.factories

在resource/META-INF下需要创建一个自动装载配置文件spring.factories, 里面的内容如下,主要填写配置类和工具类的路径

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  cn.cys.starter.redission.config.RedissionConfig,\
  cn.cys.starter.redission.utils.RedissionUtils

功能测试

完成逻辑实现以后,需要对上面的maven项目进行打包,再放入maven仓库(本地操作其实就是mvn install)
接着再创建一个maven项目,将redission starter引入,然后进行测试。具体的使用如下

application.yml配置

在application.yml填写相应的配置信息

xxx:
  redission:
    host: 192.168.110.110
    port: 6379
    password: CR2@wwqqsqsc
    timeOut: 5
    isSsl: false

POM.xml

pom文件引入redssion starter包

<dependency>
    <groupId>cn.cys.easy.boot</groupId>
    <artifactId>easy-redission-boot-starter</artifactId>
    <version>1.0.0_base</version>
</dependency>

TestController

本文直接在controller进行引入操作测试

@RestController
public class TestController {

    @Autowired
    private RedissionUtils redissonUtils;

    @GetMapping("/test")
    public void test() {

        redissonUtils.set("myname","lisi");
        System.out.println(redissonUtils.get("myname"));
        System.out.println(redissonUtils.getString("myname"));
        System.out.println("========test Redission start");
    }
}

运行测试

启动服务,调用接口查看
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文速读:通过目标感知双分支蒸馏进行跨域目标检测(CVPR2022)

原文标题&#xff1a;Cross Domain Object Detection by Target-Perceived Dual Branch Distillation 中文标题&#xff1a;通过目标感知双分支蒸馏进行跨域目标检测 论文地址&#xff1a; https://arxiv.org/abs/2205.01291 代码地址&#xff1a; GitHub - Feobi1999/TDD 这篇…

使用多块AMD GPU通过Megatron-DeepSpeed进行大型语言模型的预训练

Pre-training a large language model with Megatron-DeepSpeed on multiple AMD GPUs 2024年1月24日&#xff0c;作者&#xff1a;Douglas Jia 在这篇博客中&#xff0c;我们将向你展示如何使用Megatron-DeepSpeed框架在多块AMD GPU上预训练GPT-3模型。我们还将展示如何使用你…

5、JavaScript(二) 对象+DOM

17.对象 1、对象&#xff1a;⽤来存储多个数据的 是由多个键值对/key value对组成的 ⽤来描述⼀个事物的 相当于多个变量的集合 2、格式 &#xff1a;{key:value,key:value} 键/值对 属性名&#xff1a;属性值 3、对象的属性值是不限制数据类型的&#xff0c;甚至还可以是对…

常用的字符集(ASCII、GBK)

目录 1.ASCII字符集 2.各版本的字符集 3. GBK字符集在计算机中的存储规则 4. 总结 1.ASCII字符集 计算机中最小的存储单元是一个字节&#xff0c;一个字节8bit 0-127 一共是128个 2.各版本的字符集 只需要掌握GBK和Unicode两个字符集。GBK是简体中文window操作系统默认使…

85.【C语言】数据结构之顺序表的中间插入和删除及遍历查找

目录 3.操作顺序表 1.分析中间插入函数 函数的参数 代码示例 图片分析 main.c部分改为 在SeqList.h添加SLInsert函数的声明 运行结果 2.分析中间删除函数 函数的参数 代码示例 图片分析 main.c部分改为 在SeqList.h添加SLErase函数的声明 运行结果 承接84.【C语…

Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【检测】(五)

服务器配置如下&#xff1a; CPU/NPU&#xff1a;鲲鹏 CPU&#xff08;ARM64&#xff09;A300I pro推理卡 系统&#xff1a;Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本&#xff1a; Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

spring boot实现不停机更新

主要实现思路:发布新的应用程序(与原端口不同),启动成功后,将原端口进行优雅关闭,同时将应用程序端口动态切换至原端口 application.yml server:port: 8000shutdown: graceful DatapickCliApplication package com.zy.datapickcli;import org.springframework.boot.SpringAp…

保研考研机试攻略:python笔记(1)

&#x1f428;&#x1f428;&#x1f428;宝子们好呀 ~ 我来更新欠大家的python笔记了&#xff0c;从这一篇开始我们来学下python&#xff0c;当然&#xff0c;如果只是想应对机试并且应试语言以C和C为主&#xff0c;那么大家对python了解一点就好&#xff0c;重点可以看高分篇…

pikachu靶场CSRF-get测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、抓包使用burp生成csrf脚本 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.1) 2、使用工具/软件 Burp sui…

【Trick】在vscode上配置copilot时,输出端出现Invalid copilot token: missing token: 403

今天心血来潮想要给vscode配置一个copilot&#xff0c;正好上学期在github上通过教育邮箱实现了学生认证&#xff0c;可以免费使用copilot服务&#xff08;bushi&#xff09;。 首先是按照官网&#xff08;Getting code suggestions in your IDE with GitHub Copilot - GitHub…

机器学习与金融风控项目篇-day01-风控业务

一. 整体项目介绍 1.风控业务和风控报表 零售金融产品相关的指标风控建模流程 2.特征工程 特征构造特征筛选 3.评分卡模型构建 逻辑回归集成学习 XGBoost LightGBM模型评估 4.样本不均衡问题/异常点检测 二. 信贷与风控介绍 信贷业务 信贷业务&#xff0c;就是贷款业务&#x…

桃子叶片病害分类检测数据集(猫脸码客 第221期)

桃子叶片病害分类检测数据集 一、引言 桃子作为世界上广泛种植的果树之一&#xff0c;其叶片的健康状况直接关系到果实的产量和品质。然而&#xff0c;桃子叶片易受多种病害的侵袭&#xff0c;这些病害不仅影响叶片的光合作用&#xff0c;还可能导致果实减产、品质下降&#…

XPM_CDC_SYNC_RST

免责声明&#xff1a;本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

基于SSM的医院药品管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Axure垂直菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure垂直菜单展开与折叠 主要内容&#xff1a;垂直菜单单击实现展开/折叠&#xff0c;点击各菜单项显示选中效果 应用场景&#xff1a;后台菜单设…

靠卡车赚钱,小马智行等待Robotaxi的春天

文&#xff5c;刘俊宏 编&#xff5c;王一粟 继文远知行之后&#xff0c;又一家L4无人驾驶公司也准备上市。 10月18日&#xff0c;无人驾驶服务商小马智行向美国SEC&#xff08;证券交易委员会&#xff09;提交了招股书。继百度、Waymo、特斯拉之后&#xff0c;根据招股书的…

【EPLAN 2.9】清理Data文件夹的小工具

背景&#xff1a; 随着EPLAN不断使用“C:\Users\Public\EPLAN\Data”文件夹会越来越大&#xff08;EPLAN2.9部件管理中删除部件不会去删除文件夹内相关资源文件&#xff09;&#xff0c;本工具在于清理文件夹内未被EPLAN关联的宏、图片、文档。仅支持EPLAN 2.9 代码&#xff…

[环境配置]macOS上怎么查看vscode的commit id

macOS的commit id和windows上有点不一样&#xff0c;windows可以在帮助-关于查看 macOS则需要再左边第一个查看

(AtCoder Beginner Contest 375)C - Spiral Rotation

&#xff08;AtCoder Beginner Contest 375&#xff09;C - Spiral Rotation 题目大意 给定二维数组 a [ n ] [ n ] , n m o d 2 0 a[n][n],n \mod 20 a[n][n],nmod20 执行 i 1 , 2 , . . . i1,2,... i1,2,... n / 2 n/2 n/2 操作 每次操作对于 ∀ x , y ∈ [ i , n 1 − …

使用 JAX 进行 LLM 分布式监督微调

LLM distributed supervised fine-tuning with JAX — ROCm Blogs (amd.com) 24年1月25日&#xff0c;Douglas Jia 发布在AMD ROCm 博客上的文章。 在这篇文章中&#xff0c;我们回顾了使用 JAX 对基于双向编码器表示&#xff08;BERT&#xff09;的大型语言模型&#xff08;LL…