SpringBoot以及swagger的基本使用

news2024/9/21 15:34:01

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

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

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

相关文章

ROS2-Navigation2初体验:Gazebo“打不开”

输入ros2 launch nav2_bringup tb3_simulation_launch.py headless:False后只能打开RVIZ而无法打开Gazebo的问题&#xff0c;多次尝试解决后发现只是多等待一会儿即可&#xff0c;在此给同样学习Navigation2的朋友们提个醒 。 Getting Started — Nav2 1.0.0 documentation 1…

Mindspore框架CycleGAN模型实现图像风格迁移|(二)实例数据集(苹果2橘子)

Mindspore框架&#xff1a;CycleGAN模型实现图像风格迁移算法 Mindspore框架CycleGAN模型实现图像风格迁移|&#xff08;一&#xff09;CycleGAN神经网络模型构建Mindspore框架CycleGAN模型实现图像风格迁移|&#xff08;二&#xff09;实例数据集&#xff08;苹果2橘子&#…

补充性文件

第一 二章 1&#xff0c;关系型数据库是什么&#xff1f;其中的关系是指什么&#xff1f; 答&#xff1a; 关系型数据库是一些相关的表和其他数据库对象的集合。数据模型符合满足一定条件的二维表格式。 2&#xff0c;E-R模型&#xff1f; 实体为表。用矩形表示。属性为字…

嵌入式物联网在工业中的应用——案例分析

作者主页: 知孤云出岫 目录 嵌入式物联网在工业中的应用——案例分析引言1. 智能工厂1.1 实时监控与数据采集 2. 智能物流2.1 库存管理 3. 智能维护3.1 设备故障预测 4. 智能交通4.1 交通流量监测 总结 嵌入式物联网在工业中的应用——案例分析 引言 嵌入式物联网&#xff08;…

回车不搜索直接页面刷新问题解决

使用技术栈&#xff1a;vue3、elementUiPlus 问题&#xff1a;回车触发方法&#xff0c;会刷新整个页面&#xff0c;不执行搜索 解决方法&#xff1a;在搜索的表单中增加submit.native.prevent submit.native.prevent

项目管理:不懂跟进,项目白做

在职场上&#xff0c;工作的本质其实就是信息的传递与处理。而信息的及时传递&#xff0c;也就是我们常说的及时跟进&#xff0c;往往被许多项目经理和职场人忽视。 他们或许在暗地里埋头苦干&#xff0c;却忽略了明面上的沟通与汇报&#xff0c;最终导致合作方和内部团队都对…

利用AI辅助制作ppt封面

如何利用AI辅助制作一个炫酷的PPT封面 标题使用镂空字背景替换为动态视频 标题使用镂空字 1.首先&#xff0c;新建一个空白的ppt页面&#xff0c;插入一张你认为符合主题的图片&#xff0c;占满整个可视页面。 2.其次&#xff0c;插入一个矩形&#xff0c;右键选择设置形状格式…

【SpringBoot】SpringCache轻松启用Redis缓存

目录&#xff1a; 1.前言 2.常用注解 3.启用缓存 1.前言 Spring Cache是Spring提供的一种缓存抽象机制&#xff0c;旨在通过简化缓存操作来提高系统性能和响应速度。Spring Cache可以将方法的返回值缓存起来&#xff0c;当下次调用方法时如果从缓存中查询到了数据&#xf…

JDK,JRE,JVM三者之间的关系

Java程序不是直接在操作系统之上运行&#xff0c;而是运行在JVM&#xff08;java虚拟机&#xff09;之上。 Java源代码&#xff08;.java文件&#xff09;经编译器编译成字节码&#xff08;.class文件&#xff09;&#xff0c;JVM本质上就是一个负责解释执行Java字节码的程序。…

结合实体类型信息(2)——基于本体的知识图谱补全深度学习方法

1 引言 1.1 问题 目前KGC和KGE提案的两个主要缺点是:(1)它们没有利用本体信息;(二)对训练时未见的事实和新鲜事物不能预测的。 1.2 解决方案 一种新的知识图嵌入初始化方法。 1.3 结合的信息 知识库中的实体向量表示&#xff0b;编码后的本体信息——>增强 KGC 2基…

鸿蒙跨平台框架ArkUI-X 小试牛刀视频播放

团队介绍 作者:徐庆 团队:坚果派 公众号:“大前端之旅” 润开鸿生态技术专家,华为HDE,CSDN博客专家,CSDN超级个体,CSDN特邀嘉宾,InfoQ签约作者,OpenHarmony布道师,电子发烧友专家博客,51CTO博客专家,擅长HarmonyOS/OpenHarmony应用开发、熟悉服务卡片开发。欢迎合…

桥接器设计模式例题

笔有大、中、小三种型号&#xff0c;纸有A4、8K、16K三种型号&#xff0c;颜料有红、蓝、绿三种&#xff0c;请采用桥接器设计模型进行系统设计&#xff0c;能够使用不同型号的笔在不同型号的纸上利用不同颜色的颜料进行绘画。 下面这段代码展示了一个简单的桥接模式(桥接模式)…

数据结构之初始二叉树(2)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 二叉树的前置知识&#xff08;概念、性质、、遍历&#xff09; 通过上篇文章的学习&#xff0c;我们…

Babylonjs学习笔记(十一)——加载geoJson文件

一、定义基本场景类 定义场景定义相机 import { ArcRotateCamera, Color4, CubeTexture, Engine, GlowLayer, KeyboardEventTypes, Scene, Vector3 } from babylonjs/core;import { AdvancedDynamicTexture } from babylonjs/gui;class SceneManager {public engine: Engine;…

springboot系列教程(一):简介与入门案例(含源码)

一、SpringBoot简介 SpringBoot继承了Spring优秀的基因&#xff0c;上手难度小简化配置&#xff0c;提供各种默认配置来简化项目配置内嵌式容器简化Web项目&#xff0c;简化编码 Spring Boot 则会帮助开发着快速启动一个 web 容器&#xff0c;在 Spring Boot 中&#xff0c;只…

【Linux】从零开始认识多线程 --- 线程控制

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 从零开始认识多线程 --- 线程控制 1 知识回顾2 线程控制2.1 线程创建2.2 线程等待2.3 线程终止 3 测试运行3.1 小试牛刀 --- 创建线程3.2 探幽析微 --- 理解线程参数3.3 小有心得 --- 探索线程返回3.4 求索无厌 …

金九银十,软件测试面试题大全(自动化篇+含答案)

“ 今天我给大家介绍一些python自动化测试中常见的面试题&#xff0c;涵盖了Python基础、测试框架、测试工具、测试方法等方面的内容&#xff0c;希望能够帮助你提升自己的水平和信心。” 项目相关 1.什么项目适合做自动化测试&#xff1f; 答&#xff1a;一般来说&#xff…

鸿蒙模拟器(HarmonyOS Emulator)Beta申请审核流程

文 | Promise Sun 一.背景&#xff1a; 鸿蒙项目开发需要使用模拟器进行开发测试&#xff0c;但目前想在DevEco Studio开发工具中使用模拟器就必须到华为官网进行报名申请&#xff0c;参加“鸿蒙模拟器&#xff08;HarmonyOS Emulator&#xff09;Beta活动申请”。 申请审核通…

在互联网供应链系统可能是永远不会过时的系统

一、前言 在互联网在到人工智能&#xff0c;从基本的门户网站&#xff0c;社交网站&#xff0c;到移动互联网&#xff0c;视频网站&#xff0c;再到现在比较火爆短视频直播和人工智能AI&#xff0c;大模型。互联网的迭代&#xff0c;出现了无数的系统。但是有些系统一直久经不…

知识图谱和 LLM:利用Neo4j驾驭大型语言模型(探索真实用例)

这是关于 Neo4j 的 NaLLM 项目的一篇博客文章。这个项目是为了探索、开发和展示这些 LLM 与 Neo4j 结合的实际用途。 2023 年,ChatGPT 等大型语言模型 (LLM) 因其理解和生成类似人类的文本的能力而风靡全球。它们能够适应不同的对话环境、回答各种主题的问题,甚至模拟创意写…