SpringBoot以及swagger的基本使用

1、SpringBoot是什么?

一种快速开发、启动Spring的框架、脚手架

遵循“约定优于配置”的思想,使得能够快速创建和配置Spring应用


2、SpringBoot的核心特性

  1. 自动配置,一些依赖、默认配置都预设好了,减少了配置量
  2. 起步依赖,SpringBoot预设了一些没有依赖冲突的依赖,可以直接引用
  3. 内嵌服务器,SpringBoot将Tomcat、JBOSS等服务器内嵌了,直接以jar包的形式启动
  4. 还有监控、健康检查等功能

3、创建SpringBoot项目

创建maven工程,继承自spring-boot-starter-parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.6</version>
</parent>

添加SpringMVC和Mybtis的依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

创建启动类SpringbootSpringbootApplication.java

@SpringBootApplication
public class SpringbootSpringbootApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootSpringbootApplication.class, args);
	}

}

创建配置文件application.properties/application.yml/application.yaml

文件名必须是application,如果是相同的配置内容,优先级properties > yaml/yml

server:
  port: 8888

#可以自定义内容
user:
  userList: [ 'user1', 'user2', 'user3' ]
  passwords:
    - '123456'
    - '000000'

启动测试(运行启动类的main方法)

image-20240715165244971


4、YAML配置文件

YAML配置文件相对于properties配置/xml配置文件文件,可阅读性更高、更加简洁

4.1、语法格式

# 基本都是key: value的格式
key: value

key: 
	key1: value1
	key2: value2

配置map数据/对象数据

key: 
	key1: value1
	key2: value2

配置list/set数据

key: [value1, value2, value3...]
#---------------------------------
key: 
	- value1
	- value2
	- value3
	........

4.2 、在线查找SpringBoot的配置文件

https://docs.spring.io/spring-boot/docs/2.7.6/reference/htmlsingle/#common-application-properties

4.3 、配置文件与属性的映射

4.3.1、使用@Value注解

配置文件如下

user:
  username: 'zhangsan'
  age: 18
  friendList: [ 'user1', 'user2', 'user3' ]

实体类

@RestController
@RequestMapping("/my")
public class UserController {
	
	@Value("${user.username}")
	private String username;

	@Value("${user.age}")
	private Integer age;

	@Value("${user.friendList:user1, user2, user3}")
	private List<User> friends;
	
	@RequestMapping
	public String get() {
		return username + age + friends.toString();
	}
}

4.3.2、 使用@ConfigurationProperties注解

使用@ConfigurationProperties注解,必须作用在类上面,并添加prefix=key,其次还必须为字段设置set方法,才能实现自动装配,否则启动失败

配置文件

user:
  username: 'zhangsan'
  age: 18

实体类

@ConfigurationProperties(prefix = "user")
@RestController
@RequestMapping("/my")
public class UserController {

	private String username;

	private Integer age;

	@RequestMapping
	public String get() {
		return username + age;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}

5、 SpringBoot与Mybatis集成

5.1、 配置数据源和Mybatis

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=Asia/Shanghai
    username: root
    password: root
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-aliases-package: cn.cnmd.spring.springbootspringboot.pojo
  mapper-locations: classpath:mapper/*Mapper.xml

5.2、 编写mapper接口UserMapper

@Mapper
public interface UserMapper {

	List<User> getUsers();
}

5.3、 编写mapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.cnmd.spring.springbootspringboot.mapper.UserMapper">

	<select id="getUsers" resultType="user">
		select username,name,password,avatar as avatarIcon
		from user;
	</select>

</mapper>

5.4、 调用接口

@GetMapping("/users")
public List<User> getUsers() {
    List<User> users = userMapper.getUsers();
    return users;
}

6、 SpringBoot与JUnit集成

6.1、 导入依赖spring-boot-starter-test

<!--测试的起步依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

6.2、 编写测试案例

导入的JUnit必须是来自 org.junit.jupiter.api.Test

测试类中不能使用public修饰,否则会初始化报错,但是可以进行测试

import cn.cnmd.spring.springbootspringboot.mapper.UserMapper;
import cn.cnmd.spring.springbootspringboot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class SpringbootSpringbootApplicationTests {

	@Autowired
	private UserMapper userMapper;

	@Test
	public void getUsers() {
		
		List<User> users = userMapper.getUsers();
		System.out.println(users);
	}

}

7、 制作starter

7.1、 创建maven的quickstart工程

创建一个普通的java工程

7.2、 导入依赖

spring-boot-starter => springboot启动器

spring-boot-autoconfigure => springboot自动配置

spring-boot-configuration-processor => springboot处理元数据

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.5.6</version>
</dependency>
<!--自动装配的包-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-autoconfigure</artifactId>
  <version>2.5.6</version>
</dependency>
<!--支持元数据配置的包-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <version>2.5.6</version>
</dependency>

7.3、 编写提供服务的类、服务的属性配置类、服务的自动装配类

Xxxservice、XxxAutoConfigure、XxxProperties

7.3.1、XxxService.java

public class XxxService{
    
    XxxSevice(Xxxproperties properties){
        .....构造方法......
    }
    .......具体实现功能......
}

7.3.2、XxxProperties.java

@ConfigurationProperties(prefix = "key") //这里指定的是application.yaml文件中配置的key
public class Xxxproperties{
    //设置属性,可以添加注释和默认值
    //这里的属性是需要在application.yaml文件中配置的属性,并且需要为每个属性添加get方法
    private String p1 = "12345";
    
    private int p2 = 123;
    
    public String getP1(){
        return this.p1;
    }
    
    public int getP2(){
        return this.p2;
    }
    
}

7.3.3、XxxAutoConfigure.java

注意:当@Bean修饰的方法带有参数时,在IOC容器中必须存在对应的Bean对象

​ 比如xxxService方法有一个Xxxproperties类型的参数,那么在IOC容器中就必须存在XxxProperties这个Bean对象

​ 这里因为指定了@EnableConfigurationProperties(XxxProperties.class),就已经添加了XxxProperties这个Bean到IOC容器

@Configuration //指定这个自动配置类为配置类
@EnableConfigurationProperties(XxxProperties.class) //开启配置属性,添加对应的Xxxproperties.class
@ConditionalOnClass(XxxService.class) //保证在类路径下存在XxxService类
public class XxxAutoConfigure{
    
    @Bean
    @ConditionalOnMissingBean(XxxService.class) //这个注解在IOC容器中不存在这个Bean时执行下面的方法创建Bean并放入IOC容器中
    public XxxService xxxService(Xxxproperties properties) throws Exception{
        return new XxxService(properties);
    }
}

7.4、创建spring.factories配置文件

在resources文件夹下新建一个META-INF文件夹,然后在这个文件夹下新建spring.factories文件,这个文件就是自动装配的配置文件

文件名必须是spring.factories, 只需要指定这一个属性为自动配置类的全限定名就可以了

org.springframework.boot.autoconfigure.EnableAutoConfiguration=xx.xx.xxx.XxxAutoConfigure

7.5、将项目下载为jar包

使用maven的install下载为jar包

7.6、引用测试

首先在需要引入的地方使用

@Autowired
private XxxService service;

其次在application.yaml中配置在XxxProperties中定义的属性

key: 
	p1: "xxxxxxx"
	p2: 123456

之后就能调用XxxService中定义的方法了

8、 Swagger的使用

个人不喜欢使用,不推荐

因为swagger这个东西有版本问题,只能降低springboot版本才能使用

ps:SpringBoot 2.7.6 版本与 springfox-boot-starter 3.0.0 / springfox-boot-starter 2.9.0 都不兼容

本人使用的是Apifox,只需要将接口导出为在线文档或者HTML,和Swagger自动导出的结果一致,用法也大差不差

8.1、 导入依赖

<!--亲测 springboot2.4.2 和 springboot2.3.1.RELEASE 版本可以与 这个启动器兼容-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

8.2、 常用注解

只需要下面两个就够用了,否则加上其他注解,注解内容就显得比代码还要多

@Api => 这个注解作用在一个controller上,value属性代表controller的描述

@ApiOption => 这个注解作用在一个@XxxMapping注解的方法上,value属性代表接口的具体描述

除了注解之外,还需要添加一个配置类

SwaggerConfig.java

@Configuration
@EnableSwagger2
public class SwaggerConfig {
	@Bean
	public Docket api() {
		// Docket类就是Swagger提供的一个与Spring MVC集成的配置类
		return new Docket(DocumentationType.SWAGGER_2) // 文档类型设置为SWAGGER2
				.select() // 选择当前文档类型进行构建
				.apis(RequestHandlerSelectors.basePackage("cn.cnmd.spring.springbootspringboot.controller")) // 请求控制器包
				.paths(PathSelectors.any())// 为任意请求构建API文档
				.build() // 构建API
				.apiInfo(apiInfo()); // 设置AIP文档的信息
	}

	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title("测试项目接口文档")
				.description("测试项目接口测试")
				.version("1.0.0")
				.termsOfServiceUrl("") // 服务条款地址
				.license("") // 许可证
				.licenseUrl("") // 许可证URL
				.build();
	}
}

8.3、 访问地址

启动服务之后访问

swagger 2.x版本访问localhost:8080/swagger-ui.html

swagger 3.x版本访问localhost:8080/swagger-ui/index.html

就可以看到接口文档

接口文档中可以使用 Try it out 进行在线的接口请求,服务器会返回结果并展示到Responses区域

image-20240715192808951

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

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

相关文章

Docker的安装【虚拟机】

Docker的安装【虚拟机】 1、查看是否含有旧版本 yum list installed|grep docker2、安装docker仓库 yum -y install yum-utils3、设置docker仓库 # 清理 yum 的所有缓存 yum clean all # 更新并生成 yum 软件仓库的元数据缓存&#xff0c;确保系统使用的软件信息是最新的 y…

ASP.NET MVC-制作可排序的表格组件-PagedList版

环境&#xff1a; win10 参考&#xff1a; 学习ASP.NET MVC(十一)——分页 - DotNet菜园 - 博客园 https://www.cnblogs.com/chillsrc/p/6554697.html ASP.NET MVCEF框架实现分页_ef 异步分页-CSDN博客 https://blog.csdn.net/qq_40052237/article/details/106599528 本文略去…

嵌入式linux相机 框图

摄像头读取数据显示到LCD流程 重点&#xff1a;摄像头数据&#xff08;yuyv&#xff0c;mjpeg&#xff0c;rgb&#xff09;&#xff08;640,320&#xff09;与LCD显示数据&#xff08;RGB&#xff09;&#xff08;480&#xff0c;240&#xff09;不同&#xff1b;需要转换&…

数据结构——考研笔记(三)线性表之单链表

文章目录 2.3 单链表2.3.1 知识总览2.3.2 什么是单链表2.3.3 不带头结点的单链表2.3.4 带头结点的单链表2.3.5 不带头结点 VS 带头结点2.3.6 知识回顾与重要考点2.3.7 单链表的插入和删除2.3.7.1 按位序插入&#xff08;带头结点&#xff09;2.3.7.2 按位序插入&#xff08;不带…

如何使用 GPT?

​通过实例&#xff0c;来展示如何最好地使用 GPT。 生成文字 假设你在写一篇文章&#xff0c;需要在结尾加上这样一句&#xff1a;「California’s population is 53 times that of Alaska.」&#xff08;加州的人口是阿拉斯加州的 53 倍&#xff09;。 但现在你不知道这两个…

Git钩子Hook功能

&#x1f4be; Hook 钩子 目录 &#x1f514; 简介&#x1f514; 常见类型&#x1f514; 如何配置&#x1f514; 使用场景&#x1f514; 示例 &#x1f514; 简介 Git Hooks是Git内置的一种机制&#xff0c;允许在特定事件发生时执行自定义脚本。Git Hook可以在客户端和服务器端…

SpringBoot整合阿里云RocketMQ对接,商业版

1.需要阿里云开通商业版RocketMQ 普通消息新建普通主题,普通组,延迟消息新建延迟消息主题,延迟消息组 2.结构目录 3.引入依赖 <!--阿里云RocketMq整合--><dependency><groupId>com.aliyun.openservices</groupId><artifactId>ons-client</…

[论文笔记]构建基于RAG聊天机器人的要素

引言 今天带来一篇构建RAG的论文笔记&#xff1a;FACTS About Building Retrieval Augmented Generation-based Chatbots。 基于生成式人工智能构建企业聊天机器人迅速成为行业中最受关注的应用之一&#xff0c;旨在提高员工生产力。 然而&#xff0c;构建成功的企业聊天机器…

爬虫-requests和Selenium

1、了解requests的功能 1.1 使用post和get发送请求 HTTP中常见发送网络请求的方式有两种&#xff0c;GET和POST。GET是从指定的资源请求数据&#xff0c;POST是向指定的资源提交要被处理的数据。 GET的用法&#xff1a; import requestsr requests.get("https://www.…

随机过程基础:2.Markov (马尔可夫)过程(2)

纯生过程和纯灭过程 纯生过程&#xff1a;想象一下一个生物种群&#xff0c;比如一群兔子&#xff0c;在没有天敌的理想环境中&#xff0c;食物充足&#xff0c;疾病不存在。在这样的环境下&#xff0c;兔子的种群只会增加&#xff0c;不会减少。纯生过程模型就是用来描述这种情…

Android使用ANativeWindow更新surfaceView内容最简Demo

SurfaceView简介 SurfaceView对比View的区别 安卓的普通VIew,都依赖于当前Activity的Window的surface&#xff0c;这个surface用于承载view树从底到顶绘制出来的所有内容&#xff0c;因此任何一个view需要更新时&#xff0c;都需要把所有view中底到顶进行更新&#xff0c;即使使…

人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解1

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解。在深度学习领域,循环神经网络(RNN)因其处理序列数据的能力而备受关注。然而,传统的RNN存在梯度消失和梯度爆炸的问题,这使得它在长序列任务中的表现不尽…

【Diffusion学习】【生成式AI】淺談圖像生成模型 Diffusion Model 原理

文章目录 Diffusion Model 是如何运作的&#xff1f;吃额外的1个数字&#xff1a;stepDenoise 模组内部实际做的事情&#xff1a;预测noise如何训练 Noise Predictor Text-to-ImageDDPM 算法 from&#xff1a; https://www.youtube.com/watch?vazBugJzmz-o&listPLJV_el3uV…

深入剖析 Android 开源库 EventBus 的源码详解

文章目录 前言一、EventBus 简介EventBus 三要素EventBus 线程模型 二、EventBus 使用1.添加依赖2.EventBus 基本使用2.1 定义事件类2.2 注册 EventBus2.3 EventBus 发起通知 三、EventBus 源码详解1.Subscribe 注解2.注册事件订阅方法2.1 EventBus 实例2.2 EventBus 注册2.2.1…

无人机之电动系统篇

无人机的动能系统为无人机提供了动力&#xff0c;使无人机能够进行飞行活动。电动系统是无人机动力系统的其中一种。电力系统是将化学能转化为电能&#xff0c;再转化为机械能&#xff0c;为无人机飞行提供动力的系统。电力系统有电池、电调、电机和螺旋桨四个部分组成。 电池…

论文阅读【时间序列】TimeMixer (ICLR2024)

【时间序列】TimeMixer (ICLR2024) 原文链接&#xff1a;TIMEMIXER: DECOMPOSABLE MULTISCALE MIXING FOR TIME SERIES FORECASTING 代码仓库&#xff1a;https://github.com/kwuking/TimeMixer 符号定义 符号含义P用于预测的历史序列长度&#xff08;seq_len&#xff09;F预测…

第七天 SpringBoot与SpringCloud微服务项目交付

Spring Cloud微服务项目交付 微服务扫盲篇 微服务并没有一个官方的定义&#xff0c;想要直接描述微服务比较困难&#xff0c;我们可以通过对比传统WEB应用&#xff0c;来理解什么是微服务。 单体应用架构 如下是传统打车软件架构图&#xff1a; 这种单体应用比较适合于小项…

LVS+Keepalive高可用

1、keepalive 调度器的高可用 vip地址主备之间的切换&#xff0c;主在工作时&#xff0c;vip地址只在主上&#xff0c;vip漂移到备服务器。 在主备的优先级不变的情况下&#xff0c;主恢复工作&#xff0c;vip会飘回到住服务器 1、配优先级 2、配置vip和真实服务器 3、主…

基于hive数据库的泰坦尼克号幸存者数据分析

进入 ./beeline -u jdbc:hive2://node2:10000 -n root -p 查询 SHOW TABLES; 删除 DROP TABLE IF EXISTS tidanic; 上传数据 hdfs dfs -put train.csv /user/hive/warehouse/mytrain.db/tidanic 《泰坦尼克号幸存者数据分析》 1、原始数据介绍 泰坦尼克号是当时世界上…

PyTorch人脸识别

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 一套基本的人脸识别系统主要包含三部分&#xff1a;检测器、识别器和分类器&#xff0c;流程架构如图11-3所示&#xff1a; 图11-5 检测器负责检测图片中的人脸&#xff0c;再将检测出来的人脸感兴趣区域&#xff08;Reg…