Springboot3集成Web、RedisTemplate、Test和knife4j

本例将展示,如何在Springboot3中完成:

  • Redis功能的Web接口实现
  • 构建Redis功能的单元测试
  • knife4j自动化生成文档

Redis功能

Pom.xml

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

application.yml

用于指定Redis的地址和端口信息

spring:data:redis:host: 127.0.0.1port: 6379

Redis操作代理文件

使用RedisTemplate自动化加载上述配置,然后借用它的方法完成Redis的操作。

// SetOperation.java
package org.example.redistemplateexample.redis;import jakarta.annotation.Resource;import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;@Component
public class SetOperation {@Resourceprivate RedisTemplate<String, String> redisTemplate;/*** Adds the specified members to the set stored at the given key.** @param key    the key of the set* @param values the members to be added to the set* @return the number of elements that were added to the set*/public Long SAdd(String key, String... values) {return redisTemplate.opsForSet().add(key, values);}……
}

Redis单元测试

Pom.xml

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

测试文件

package org.example.redistemplateexample.redis;import java.util.ArrayList;
import java.util.List;
import java.util.Set;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.util.Pair;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest
public class SetOperationTest {@Autowiredprivate SetOperation setOperation;@Testpublic void testSAdd() {Pair<String, ArrayList<String>> pair = KeyGenerator.generateSetString("testSAdd", 3);final String key = pair.getFirst();final ArrayList<String> values = pair.getSecond();assertEquals(3, setOperation.SAdd(key, values.toArray(new String[0])));}……
}

KeyGenerator是我用于生成测试数据的工具类

package org.example.redistemplateexample.redis;import org.springframework.data.util.Pair;import java.util.ArrayList;public class KeyGenerator {public static Pair<String, ArrayList<String>> generateSetString(String biz, int count) {long currentTime = System.currentTimeMillis();String key = STR."\{biz}_key_\{currentTime}";ArrayList<String> list = new ArrayList<>();for (int i = 0; i < count; i++) {list.add(STR."\{biz}_value_\{i}");}return Pair.of(key, list);}
}

在这里插入图片描述

Web接口

Pom.xml

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

application.properties

spring.application.name=RedisTemplateExample
server.port=8080

Controller

package org.example.redistemplateexample.controller;import org.example.redistemplateexample.redis.SetOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Arrays;
import java.util.ArrayList;@RestController
@RequestMapping("/set_operation")
public class SetOperationController {@Autowiredprivate SetOperation setOperation;@PostMapping("/sadd")public Long sadd(String key, String values) {ArrayList<String> valuesList = new ArrayList<String>(Arrays.asList(values.split(",")));return setOperation.SAdd(key, valuesList.toArray(new String[0]));}……
}

自动化生成文档

我们使用knife4j

Pom.xml

		<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</version></dependency>

application.yml

springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'Controller'paths-to-match: '/**'packages-to-scan: org.example.redistemplateexample.controllerknife4j:enable: truesetting:language: zh_cn

packages-to-scan是我们让knife4j搜索的包名

对Controller的修改

controller可以不修改,但是可以增加部分信息,让knife4j看起来更美观。

//
// add for knife4j.非必须
@Tag(name = "SetOperationController")
//
@RestController
@RequestMapping("/set_operation")
public class SetOperationController {@Autowiredprivate SetOperation setOperation;
//// add for knife4j.非必须@Operation(summary = "Add members to a set")@Parameters({@Parameter(name = "key", description = "Key"),@Parameter(name = "values", description = "Values. Multiple values should be separated by commas. Example: \"1\", \"2\", \"3\"")})
//    @PostMapping("/sadd")public Long sadd(String key, String values) {ArrayList<String> valuesList = new ArrayList<String>(Arrays.asList(values.split(",")));return setOperation.SAdd(key, valuesList.toArray(new String[0]));}

然后我们在http://127.0.0.1:8080/doc.html就可以看到各个接口的文档。
在这里插入图片描述
在这里插入图片描述

题外

由于我们使用的是Java22,会使用到一些新特性,在Vscode中编译时会报如下错误。

String Template is a preview feature and disabled by default. Use --enable-preview to enable

我们只需要在Pom.xml中加入如下内容,即可解决(重启Vscode)

			<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version><configuration><release>22</release><compilerArgs><arg>--enable-preview</arg></compilerArgs></configuration></plugin>

测试的Redis可以使用Docker方案,然后映射本地的端口(和yml文件中端口一致就行)

docker pull redis

在这里插入图片描述

完整项目

https://github.com/f304646673/RedisTemplateExample.git

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

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

相关文章

windows SDK编程 --- 消息(3)

前置知识 一、消息的分类 1. 鼠标消息 处理与鼠标交互相关的事件&#xff0c;比如移动、点击和滚动等。例如&#xff1a; WM_MOUSEMOVE: 当鼠标在窗口客户区内移动时发送。WM_LBUTTONDOWN: 当用户按下鼠标左键时发送。WM_LBUTTONUP: 当用户释放鼠标左键时发送。WM_RBUTTOND…

区块链交易所技术开发架构解析 交易所开发团队

区块链交易所是加密货币市场中的关键基础设施之一&#xff0c;它提供了一个平台&#xff0c;让用户可以买卖各种数字资产。而搭建一个功能完善、安全可靠的交易所需要一个复杂的技术开发架构&#xff0c;以及一个协调配合的交易所开发团队。下面我们将分析交易所的技术架构以及…

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告&#xff1a;“学习排名 (Learning To Rank)” 功能处于技术预览版&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但此功能不受官方 GA 功能的支持 SLA 的约束。 注意&#xff1a;此功能是在版本 8.12.0 中引入的&#xff0c;并且仅适…

Ghost Buster Pro for Mac:强大的系统优化工具

Ghost Buster Pro for Mac是一款功能强大的系统优化工具&#xff0c;专为Mac用户设计&#xff0c;旨在提供全方位的系统清理、优化和维护服务。 Ghost Buster Pro for Mac v3.2.5激活版下载 这款软件拥有出色的垃圾清理能力&#xff0c;能够深度扫描并清除Mac上的无效目录、文件…

个人网站的SEO优化系列——如何实现搜索引擎的收录

如果你自己做了一个网站&#xff0c;并且想让更多的人知道你的网站&#xff0c;那么无非就是两种途径 一、自己进行宣传&#xff0c;或者花钱宣传 二、使用搜索引擎的自然流量 而如果搜索引擎都没有收录你的站点&#xff0c;别说是自然流量&#xff0c;就算是使用特定语句【sit…

文件上传服务器、文件展示等异步问题

问题&#xff1a; 文件上传模块&#xff1a;当文件已经上传完成&#xff0c;文件进度已经走完了&#xff0c;但是服务器响应还没有返回结果&#xff0c;出现了&#xff0c;获取不到上传后的文件路径&#xff0c;需要等待服务器返回结果后&#xff0c;才能获取文件路径并点击跳…

excel中怎么用乘法、加法来替代AND和OR函数

你可以使用乘法和加法来替代Excel中的AND和OR函数&#xff0c;虽然这样做可能会增加公式的复杂度&#xff0c;但在某些情况下是可行的。 1. 使用乘法替代AND函数&#xff1a;AND函数用于判断一系列条件是否同时成立&#xff0c;如果所有条件都为TRUE&#xff0c;则返回TRUE&…

IOMMU和SMMU详解

前言&#xff1a; IOMMU&#xff08;输入输出内存管理单元&#xff09;的原理与CPU中的MMU&#xff08;内存管理单元&#xff09;相似。它的作用是管理设备的内存访问请求&#xff0c;允许安全、高效地在设备和内存之间直接传输数据。IOMMU通常用于支持高速数据传输的设备&…

java生成数据库数据到excel当做下拉选择,copy就完事~

背景&#xff1a;由于需要下载模板&#xff0c;模板包含下拉选择框&#xff0c;但是下拉选择框不想手写&#xff0c;并且需要从数据库读取&#xff0c;由于直接设置excel会有单元格最大255个字符长度限制&#xff0c;所以用到以下部分代码。 思路&#xff1a;由于数据模板在sh…

怎么通过Javascript脚本实现远程控制一路开关

怎么通过Javascript脚本实现远程控制一路开关呢&#xff1f; 本文描述了使用Javascript脚本调用HTTP接口&#xff0c;实现控制一路开关。一路开关可控制一路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称1智能WiFi…

JSON Web Token 入门

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案&#xff0c;本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后&#xff0c;在当前对话&…

基于微信小程序的宠物寄养小程序,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Redis中的慢查询日志和监视器

慢查询 添加新日志 在每次执行命令的之前和之后&#xff0c;程序都会记录微妙格式的当前UNIX时间戳&#xff0c;这两个时间戳之间的差就是服务器执行命令所耗费的时长&#xff0c;服务器会将这个时长作为参数之一传给slowlogPushEntryIfNeeded函数&#xff0c;而slowlogPushE…

网络安全数字孪生:一种新颖的汽车软件解决方案

摘要 随着汽车行业转变为数据驱动的业务&#xff0c;软件在车辆的开发和维护中发挥了核心作用。随着软件数量的增加&#xff0c;相应的网络安全风险、责任和监管也随之增加&#xff0c;传统方法变得不再适用于这类任务。相应的结果是整车厂和供应商都在努力应对汽车软件日益增加…

System Dashboard for Mac:强大的系统监控与管理工具

System Dashboard for Mac是一款专为苹果电脑设计的系统监控与管理工具&#xff0c;以其直观易用的界面和全面的功能&#xff0c;深受用户喜爱。 System Dashboard for Mac v1.10.11激活版下载 这款软件能够实时监测系统的重要参数&#xff0c;包括CPU使用率、内存利用率、硬盘…

nginxtomcat笔记

nginx是一个轻量级高性能的http和反向代理web服务器&#xff0c;优点&#xff1a;占用内存少&#xff0c;并发能力强 实验主机&#xff1a;192.168.200.141 192.168.200.142 1.虚拟主机 1.1基于域名&#xff1a;一台服务器&#xff0c;一个端口&#xff0c;部署多个网站 在ng…

yolov5 的几个问题,讲的比较清楚

yolov5, 几个问题 【BCELoss】pytorch中的BCELoss理解 三个损失函数原理讲解 https://zhuanlan.zhihu.com/p/458597638 yolov5源码解析–输出 YOLOv5系列(十) 解析损失部分loss(详尽) 1、输入数据是 xywh, 针对原图的, 然后,变成 0-1, x/原图w, y/原图h, w/原图w, h/原图h,…

51-43 DragNUWA,集成文本、图像和轨迹实现视频生成细粒度控制

微软 NWA 系列主要功能及发布时间如下&#xff1a; 22年11月&#xff0c;微软亚洲研究院、北京大学联合提出同时覆盖语言、图像和视频的统一多模态生成模型女娲NWA&#xff0c;直接包揽草图转图像、图像补全、视频预测、文字指导修改视频等8项SOTA。23年3月&#xff0c;微软亚…

LLM学习之自然语言处理简单叙述

自然语言处理基础 自然语言处理&#xff1a;让计算机读懂人所写好的这些文本&#xff0c;能够像人一样进行交互。 自然语言处理的任务和应用 任务&#xff1a; 词性标注 part of speech tagging 动词&#xff0c;名词&#xff0c;形容词&#xff1f; 命名实体的识别 name…

【Java基础】23.接口

文章目录 一、接口的概念1.接口介绍2.接口与类相似点3.接口与类的区别4.接口特性5.抽象类和接口的区别 二、接口的声明三、接口的实现四、接口的继承五、接口的多继承六、标记接口 一、接口的概念 1.接口介绍 接口&#xff08;英文&#xff1a;Interface&#xff09;&#xf…