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.1
      port: 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 {

    @Resource
    private 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 {

    @Autowired
    private SetOperation setOperation;

    @Test
    public 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 {

    @Autowired
    private 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.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'Controller'
      paths-to-match: '/**'
      packages-to-scan: org.example.redistemplateexample.controller

knife4j:
  enable: true
  setting:
    language: zh_cn

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

对Controller的修改

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

//
// add for knife4j.非必须
@Tag(name = "SetOperationController")
//
@RestController
@RequestMapping("/set_operation")
public class SetOperationController {

    @Autowired
    private 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【EdgeBox-8120AI-TX2】Ubuntu18.04 + ROS_ Melodic + 星秒PAVO2单线激光 雷达评测

大家好&#xff0c;我是虎哥&#xff0c;好久不见&#xff0c;最近这断时间出现了一点变故&#xff0c;开始自己创业&#xff0c;很多事需要忙&#xff0c;所以停更了大约大半年&#xff0c;最近一切已经理顺&#xff0c;所以我还是抽空继续我之前的FLAG&#xff0c;CSDN突破十…

Hadoop伪分布式平台搭建

搭建Hadoop伪分布式环境是在单台机器上模拟完整的Hadoop分布式系统&#xff0c;使得所有的Hadoop守护进程&#xff08;如NameNode、DataNode、ResourceManager、NodeManager等&#xff09;都在同一台机器上运行。这样可以在一台机器上体验Hadoop的分布式特性&#xff0c;适合学…

《AI极简经济学》|揭开AI面纱,普通人的机遇与挑战

《AI极简经济学》一书由经济学家阿杰伊阿格拉沃尔、乔舒亚甘斯和阿维戈德法布联袂撰写&#xff0c;他们共同创立了创新颠覆实验室&#xff08;Creative Destruction Lab&#xff0c;简称CDL&#xff09;&#xff0c;实验室的研究领域主要集中在人工智能和决策领域。他们通过《A…

java 词法分析练习

import parser.Parser;import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class Main {public static void main(String[] args) {// 关键词List<String> keyList new ArrayList<>(Arrays.asList("int","String…

汽车组装3D电子说明书更通俗易懂

激光打印机由于造价高、技术更先进&#xff0c;因此在使用和维护上需要更专业的手法&#xff0c;而对于普通客户来说并不具备专业操作激光打印机的技能&#xff0c;为了通俗易懂地让客户理解激光打印机&#xff0c;我们为企业定制了激光打印机3D产品说明书&#xff0c;将为您带…

Trello与Notion的开源替代项目管理利器Focalboard本地安装与远程访问

本篇文章将介绍如何使用 Docker 本地部署 Focalboard 项目管理工具&#xff0c;并且结合 cpolar 内网穿透进行公网访问&#xff0c;实现团队协作&#xff0c;提高工作效率&#xff01; Focalboard 是一个开源项目管理工具&#xff0c;可以替代 Asana、Trello 和 Notion 等软件…

软件项目交付支撑文档有哪些?文档下载获取

软件文档交付清单是指在软件开发项目完成后&#xff0c;开发团队需要准备的一份详细清单&#xff0c;用于确保交付的软件产品符合客户需求并达到预期的质量标准。以下是软件文档交付清单中可能包含的一些关键要素 软件开发文档&#xff1a;这包括需求文档、设计文档、测试文档等…

SignalR中的重连机制和心跳监测机制详解

一. 重连机制 声明&#xff1a;   本节仅介绍重连机制和心跳监测机制&#xff0c;基于Core 3.1框架&#xff0c;至于SignalR其它的一些基本使用&#xff0c;包括引入、Hub、配置等常规操作&#xff0c;在本节中不介绍&#xff0c;后续写Core下的SignalR 说明   默认是没有重…

Linux抓包工具tcpdump

一、tcpdump抓包工具 1.命令格式解析 命令格式&#xff1a;tcpdump option proto dir type proto&#xff08;协议&#xff09; 1.tcp、udp、icmp 2.ip、ipv6 3.arp dir&#xff08;数据的方向 &#xff09; 1.src 192.168.7.130 只抓取源地址是7.130 2.…

【数学建模】DVD在线租赁

2005高教社杯全国大学生数学建模竞赛题目B 随着信息时代的到来&#xff0c;网络成为人们生活中越来越不可或缺的元素之一。许多网站利用其强大的资源和知名度&#xff0c;面向其会员群提供日益专业化和便捷化的服务。例如&#xff0c;音像制品的在线租赁就是一种可行的服务。这…

A Survey of State of the Art on Rumor Detection in Social Network

Abstract 互联网上充斥着谣言帖子&#xff0c;谣言的传播会给社会和谐稳定带来负面影响&#xff0c;影响网络信息生态的健康发展。谣言的不确定性、时效性、主观性等特点&#xff0c;使其不同于一般的虚假网络信息。社交网络谣言检测是社交网络与信息传播研究领域的热点问题&am…

Linux 调度优先级

Linux中的每个任务都有其优先级。这个优先级的范围从-20到19。优先级越低&#xff08;-20&#xff09;&#xff0c;分配 给任务的CPU时间就越多。默认的优先级是0。 并非所有的任务都需要使用相同的优先级。交互式应用要求快速响应&#xff0c;通过 crontab 运行的后台…

Java本地缓存技术选型(Guava Cache、Caffeine、EhCache)

前言 对一个java开发者而言&#xff0c;提到缓存&#xff0c;第一反应就是Redis。利用这类缓存足以解决大多数的性能问题了&#xff0c;我们也要知道&#xff0c;这种属于remote cache&#xff08;分布式缓存&#xff09;&#xff0c;应用的进程和缓存的进程通常分布在不同的服…

Web3技术解析:区块链在去中心化应用中的角色

引言 在过去几年中&#xff0c;Web3技术已经成为了互联网领域的一个热门话题。作为区块链技术的延伸&#xff0c;Web3不仅仅是数字货币的代名词&#xff0c;更是一个能够为各种应用提供去中心化解决方案的强大工具。本文将深入探讨区块链在Web3去中心化应用中的关键角色&#…

贪心算法在找零问题中的应用

贪心算法在找零问题中的应用 引言a. 贪心算法求解找零问题算法设计算法证明 b. 硬币面额为c的幂时的贪心算法证明算法设计算法证明 c. 设计使贪心算法失效的硬币面额组合d. 通用找零算法设计算法设计算法实现&#xff08;伪代码&#xff09;算法实现&#xff08;C代码&#xff…

【热门话题】PostCSS:现代前端开发中的CSS增强工具

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 PostCSS&#xff1a;现代前端开发中的CSS增强工具一、引言二、PostCSS简介2.1 核…

【树莓派4B】如何点亮树莓派的LED灯

在之前一系列文章中&#xff0c;使用python、行人入侵检测&#xff0c;确没有使用树莓派的硬件。控制引脚进行输出&#xff1a; 如何写python点亮led灯闪烁&#xff0c;我灯接在gpio13,GPIO19,gpio26。我都想闪烁。 你可以使用Python的GPIO库来控制树莓派上的LED灯。首先&…

安卓常用组件(启停活动页面、活动之间传递信息、收发应用广播、操作后台服务)

启停活动页面 Activity的启动和结束 页面跳转可以使用startActivity接口&#xff0c;具体格式为startActivity(new Intent(this, 目标页面.class));。 关闭一个页面可以直接调用finish();方法即可退出页面。 Activity的生命周期 页面在安卓有个新的名字叫活动&#xff0c;因…

【MySQL关系型数据库】基本命令、配置、连接池

目录 MySQL数据库 第一章 1、什么是数据库 2、数据库分类 3、不同数据库的特点 4、MySQL常见命令&#xff1a; 5、MySQL基本语法 第二章 1、MySQL的常见数据类型 1、数值类型 2、字符类型 3、时间日期类型 2、SQL语句分类 1、DDL&#xff08;数据定义语言&#x…

Relu激活函数

概念 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值&#xff0c;并将输入值传递给下一层。在多层神经网络中&#xff0c;上层节点的输出和下层节点的输入之间具有一个函数关系&#xff0c;这个函数称为激活函数。 激活函数做的事情时把神经元的输…