spring boot文档阅读笔记——01

news2025/1/15 16:27:58

目录标题

    • 一、文档地址
    • 二、第一个spring boot例子
    • 三、 Starters(spring boot 官方提供的启动器)
    • 四、@SpringBootApplication注释
    • (一)@EnableAutoConfiguration
    • (二)ComponentScan
    • 五、devtools(热插拔)
    • 六、开启debug模式
    • 七、故障分析器(启动spring boot失败)
    • 八、 自定义横幅(启动logo)
    • 九、配置文件YAML 、properties...
    • (一)配置优先级
      • 1. jar包内部(项目内设置)
      • 2. jar包外部(打包后)
      • 2. 启动jar时的命令行参数(启动项目时)
      • 4. 配置分支dev、test、prod
    • (二)@Value 导入
    • (三)随机配置值
    • (四)@ConfigurationProperties
    • (五)@ConfigurationProperties + @PropertySource 指定文件加载配置
    • (六)@ConfigurationProperties + @EnableConfigurationProperties
    • (七)@Validated(导入的配置校验)
    • (八)@ConfigurationProperties vs. @Value

一、文档地址

spring boot 官方文档

二、第一个spring boot例子

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

	@RequestMapping("/")
	String home() {
		return "Hello World!";
	}

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

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、 Starters(spring boot 官方提供的启动器)

Starters 是,spring boot 使用起来十分方便的原因之一。官方提供了各种应用场景下的启动器,只要我们在maven中导入了相应的依赖坐标(jar包),spring boot 就能帮我们自动配置好相关的插件,即开箱即用。

spring boot 官方的启动器命名一般为:spring-boot-starter-XXX;我们在自定义启动器时,因该避免和官方的命名风格一致。可以命名为:spring-boot-XXX-starter

在这里插入图片描述

注意: spring-boot-starter-actuator 这个启动器在spring cloud中会常常使用它当作微服务的运行的监视和管理。

在这里插入图片描述

四、@SpringBootApplication注释

@SpringBootApplication注释 它是一个复合注解 ,由三个核心注解组成:@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan

你可以将@SpringBootApplication 换成 上面三个注解,程序依旧能运行起来。

//这个注解其实就是Configuration,这里只是换了个名字
@SpringBootConfiguration

//spring boot 能够自动装配的核心注解
@EnableAutoConfiguration

//配置包扫描,将扫描到在类上标注了@Component,@Controller,@Service 等注解的类,实例化为单例bean,交给spring 容器管理。
@ComponentScan(
        excludeFilters = {@ComponentScan.Filter(
                type = FilterType.CUSTOM,
                classes = {TypeExcludeFilter.class}
        ), @ComponentScan.Filter(
                type = FilterType.CUSTOM,
                classes = {AutoConfigurationExcludeFilter.class}
        )}
)
public class SpringBoot01HelloworldQuickApplication {

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

}

(一)@EnableAutoConfiguration

@EnableAutoConfiguration 注解可以通过配置过滤器(exclude、excludeName属性)来排除一些,不需要spring boot 自动装配的类。

在这里插入图片描述
可以看到注解有两个属性,他们都是数组类型。exclude 是根据类进行排除,excludeName根据类名。

注意: 数组类型需要使用{}括号括起来,使用逗号进行分隔多个排除项。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

(二)ComponentScan

包扫描可以选择哪些路径下的bean自动实例化注册到容器中。

五、devtools(热插拔)

spring boot 热部署

六、开启debug模式

配置文件:application.properties

# 默认关闭 ,true开启 
debug=true

七、故障分析器(启动spring boot失败)

在这里插入图片描述

八、 自定义横幅(启动logo)

配置文件:application.properties

# 默认开启 ,off关闭
spring.main.banner-mode=off

在这里插入图片描述

九、配置文件YAML 、properties…

Spring Boot 允许在外部加载您的配置,以便您可以使用相同的配置, 不同环境中的应用程序代码(dev、test、prod)。您可以使用properties 文件、YAML 文件、 环境变量(dev、test、prod)和命令行参数,灵活的改变配置。配合一些注解(@Value 、@ConfigurationProperties、@PropertySource + @ConfigurationProperties)将配置值直接注入到您的 bean 中, 通过 Spring 的抽象访问,或绑定到结构化 对象通过 。

官方文档提供了以下改变配置的方式:
在这里插入图片描述

(一)配置优先级

优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 。

  1. 命令行参数。所有的配置都可以在命令行上进行指定;
  2. 来自java:comp/env的JNDI属性;
  3. Java系统属性(System.getProperties());
  4. 操作系统环境变量 ;
  5. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  6. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile
  7. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  8. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  9. @Configuration注解类上的@PropertySource

常见的配置方式有三种:jar包内部(项目内设置)、jar包外部(打包后)、启动jar时的命令行参数(启动项目时)。

内容参考与SpringBoot 配置文件加载优先级

1. jar包内部(项目内设置)

jar包内部(项目内设置)也有优先级之分。 这里的优先级也是要遵循上面1-9级的,只是配置优先级同在6、8级时,再根据下面的优先级进行加载
在这里插入图片描述
在这里插入图片描述

如果配置文件没有被idea识别出来,可以参考这里修改idea的配置。

在这里插入图片描述

2. jar包外部(打包后)

通过maven将test代码带包成jar(创建一个spring boot 项目,然后新建几个配置文件,改一下每个配置文件的端口号)

在这里插入图片描述

# 通过下面的命令启动
java -jar xxx.jar 

发现运行的端口号是8083,而不是在打包前的8081。原因是,spring boot 打包时是不会把 ./config ./这两级的目录打包进去
在这里插入图片描述

通过jar包外配置文件覆盖 jar包内的配置文件。

SpringBoot 支持把配置文件放在外部。只要把配置文件放在jar包的同级目录下,或者放在同级下的config文件夹中,SpringBoot都会去此处读取配置文件

在打包的jar包目录下创建两个配置文件,一个放到jar包同级目录下,一个放到config中。

config/application.yml : port: 8085

application.yml : port: 8086

在这里插入图片描述

重新启动jar

java -jar xxx.jar 

在这里插入图片描述
结果为8085。

2. 启动jar时的命令行参数(启动项目时)

使用方式,在启动jar包的命令后面增加启动参数。java -jar xxx.jar --配置名=属性值

java -jar xxx.jar  --server.port=8087

在这里插入图片描述

4. 配置分支dev、test、prod

如果配置文件中出现了分支。那么jar包内部(项目内设置)、jar包外部(打包后)的优先级在指定的分支之后。也就是如果配置了分支那么以配置的分支为准。(这个可以自行测试)

指定了活跃的分支,那么会优先分支的配置

spring:
  profiles:
    active: prod
---
server:
  port: 8081
spring:
  profiles: prod
  
---
server:
  port: 8082
spring:
  profiles: test

---
server:
  port: 8083
spring:
  profiles: dev

命令行 > jar包外指定的分支 > jar包内指定的分支 > jar包外(config目录下)> jar包外(同级目录) > jar包内(config目录下)> jar包内

(二)@Value 导入

通过@Value 导入配置文件中的一些属性值到bean内。

import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;

@Component
public class MyBean {

    @Value("${my.name}")
    private String name;
    
    @Value("${my.age}")
    private int age;

}

application.yml 、application.properties:

my:
  name: lihua
  age: 18

注意:@Value 注解只能导入名字为:application的配置文件的配置。

(三)随机配置值

application.yml 、application.properties:

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

在这里插入图片描述

注意: 配置文件中${} 为占位符,可以导入其他配置 。

app.name=MyApp  
app.description=${app.name} is a Spring Boot application

(四)@ConfigurationProperties

@Value(“${my.name}”) 只能标注在属性上,一个个属性进行注入配置,比较麻烦,可以通过@ConfigurationProperties 可以按照名字匹配(支持宽松绑定)进行批量注入

在这里插入图片描述

@Component
@ConfigurationProperties(prefix = "my")
@Data
@ToString
public class User1 {
    private int id;

    private String name;

    private int age;
}

注意: 只使用这个注解只能导入名字为:application的配置文件的配置。

(五)@ConfigurationProperties + @PropertySource 指定文件加载配置

@Component
@PropertySource("123.properties")
@ConfigurationProperties(prefix = "my1")
@Data
@ToString
public class User2 {
    private int id;

    private String name;

    private int age;
}

(六)@ConfigurationProperties + @EnableConfigurationProperties

通过@EnableConfigurationProperties 注解,将配置导入到UserProperties中。

/**
 * @author lihua
 * @date 2022/12/27 8:59
 **/
@EnableConfigurationProperties({UserProperties.class})
@Configuration
public class UserAutoConfiguration {
}
/**
 * @author lihua
 * @date 2022/12/27 8:58
 **/
@ConfigurationProperties(prefix = "my2")
@Data
@ToString
public class UserProperties {

    private int id;

    private String name;

    private int age;

}

注意:这里不需要增加@Component 注解(加了就直接是第(四)点 的方式加载配置了)

(七)@Validated(导入的配置校验)

在这里插入图片描述

@Null 限制只能为null
@NotNull 限制必须不为null
@NotEmpty 只作用于字符串类型,字符串不为空,并且长度不为0
@NotBlank 只作用于字符串类型,字符串不为空,并且trim()后不为空串
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位
数不能超过fraction
@Future 限制必须是一个将来的日期
@Past 验证注解的元素值(日期类型)比当前时间早
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式


注意:
@NotNull 适用于任何类型被注解的元素必须不能与NULL
@NotEmpty 适用于String Map或者数组不能为Null且长度必须大于0
@NotBlank 只能用于String上面 不能为null,调用trim()后,长度必须大于0

(八)@ConfigurationProperties vs. @Value

在这里插入图片描述

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

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

相关文章

当项目经理看世界杯决赛时…

12月18日,2022卡塔尔世界杯决赛,阿根廷在点球大战中击败卫冕冠军的法国队,捧走大力神杯。这场跌宕起伏的“巅峰对决”,给大家呈现了一场精彩绝伦的比赛。 当阿根廷2-0领先七十多分钟的时候,都以为这局稳了&#xff0c…

跨平台应用开发进阶(五十一):HTML5(富文本内容)连续数字、字母不自动换行问题分析及解决

文章目录一、前言二、问题分析三、解决方法3.1 对 input 标签设置3.2 对 input 标签内的 p 标签设置四、延伸阅读 顶部状态栏穿透问题五、拓展阅读一、前言 项目开发过程中,涉及在Web端维护富文本内容,通过APP端查看的相关的功能,功能描述大…

repo init详解

首先选择manifest源,一般直接使用清华或中科大的镜像源 repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest是清华提供的镜像源 repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest是中国科学技术大学的镜像源 repo init推荐使用-b 分…

未来汽车产业新生态高峰论坛在深圳举行

【2022年12月22日发自深圳】汽车产业正面临百年未有之大变局,以数字化技术为特征的智能网联汽车已经成为全球汽车产业转型升级的战略方向。汽车的属性也从一个机械化的交通工具转变成与各个生态相互连通的移动终端和数字空间。12月21日,由工业和信息化部…

【C++初阶】模板进阶

文章目录非类型模板参数模板特化函数模板特化类模板特化全特化偏特化模板的分离编译模板总结所有测试的代码非类型模板参数 模板参数分类类型形参与非类型形参 1.类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 2.非类型形…

创建城市人口总量趋势图

创建城市人口总量趋势图学习目标使用数据人口总量趋势方程数据导入对数据进行处理fct_reorder2的应用对数据进行整理对图像进行可视化操作使用fct_reorder2去掉趋势点内容小结学习目标 我们所采用的学习内容来自B站的Lizongzhang老师的R语言的学习分享 今天学习的主要内容是关…

数据集说明:COCO的两个数据集COCO-stuff和COCO-Caption

数据集图片数量比较 COCO-Caption有33万张图、50万个caption COCO-Stuff有16.4万张图 172个类别(80thing、91stuff、1个未标注类) COCO-stuff的具体类别说明 COCO-Stuff contains 172 classes:80 thing, 91 stuff, and 1 class unlabeled. The 80 thing classes are the same …

群晖nas部署python项目

事件起因是因为想再硬盘里下载小姐姐,在线播放会卡顿很不爽, 开始用一些在线爬的网站,网速非常慢,我发现自己有nas 如果把项目部署再nas上 通过命令行下载就好了 我就开始检索资料,发现网上的都是一些过时的文章&#…

分布式系统关键路径延迟分析实践

作者 | 月色如海 导读 随着对用户体验的不断追求,延迟分析成为大型分布式系统中不可或缺的一环。本文介绍了目前在线服务中常用的延迟分析方法,重点讲解了关键路径分析的原理和技术实现方案,实践表明此方案效果显著,在耗时优化方面…

图解深度学习-提高泛化能力的方法

数据集 在深度学习的训练过程中,神经网络的类型和结构固然重要,但训练样本才是重中之重。 数据增强 当训练样本数量较少时,可以通过数据增强来增加样本的多样性。 数据增强就是通过对样本图像进行平移、旋转、镜像翻转等方式进行变换。除…

【Java】Log4j日志

目录 1.日志概述 日志是什么 为什么会有日志 2.log4j概述 什么是log4j 版本 3.log4j入门案例 步骤 实现 总结 4.log4j1详情:记录器rootLogger 5.log4j1详情:日志级别 6.log4j1详情:输出源appender ConsoleAppender FileAppend…

第二十八章 数论——扩展欧几里德算法与线性同余方程

第二十八章 扩展欧几里德算法一、裴蜀定理1、定理内容2、定理证明二、扩展欧几里德定理1、作用2、思路3、代码三、线性同余方程1、问题2、思路3、代码一、裴蜀定理 1、定理内容 对于任意整数aaa和bbb,一定存在整数xxx,yyy使得axbyaxbyaxby是gcd(a,b)gc…

Linux的基本指令

前言 相对于linux操作系统,其实window也是操作系统,我们这节课说的是Linux的基本指令 那么在window上有没有基本指令呢,答案是有的,我们可以使用windowsr进入cmd就可以用我们的基本指令 基本指令 在本文中,我们基本上都使用类比的…

基于threeJS实现圣诞节孔明灯效果

1.效果图 2.实现思路 使用three.js的套路几乎是固定的: 1 初始化场景(scene) 2.创建透视相机(camera) 3.设置相机位置(position) 4.创建纹理加载器对象(texture) 5.创建…

【SegNeXt】语义分割中对卷积注意力设计的反思

目录 1.摘要 2.相关工作 2.1语义分割 2.2多尺度网络 2.3注意力机制 3.网络结构 3.1卷积编码器 3.2解码器 4.实验 个人总结: 论文链接:论文 代码链接:代码 论文发表于NeurIPS 2022,值得注意的是,在Transforme…

UVM入门和进阶实验0

一. 概述 UVM学习流程仍然按照SV时候的核心流程,即: 如何搭建验证框架验证组件之间的连接和通信如何编写测试用例,继而完成复用和覆盖率的收敛 我们UVM入门和进阶实验0还是同之前SV验证实验0思想一样,让大家通过简单的实验要求…

学习HTTP协议,这一篇就够啦 ~~

HTTP协议一、什么是HTTP1.1 应用层协议1.2 HTTP1.3 HTTP协议的工作过程二、HTTP协议格式2.1 Fiddler抓包工具2.2 协议格式三、HTTP请求 (Request)3.1 认识 "方法" (method)3.1.1 GET 方法3.1.2 POST 方法3.1.3 GET和POST比较3.1.4 其他方法3.2 认识URL3.2.1 URL基本格…

基于迅为3568开发板的多屏同/异显动态方案

iTOP-RK3568开发板采用四核Cortex-A55处理器,芯片内置VOP控制器,支持HDMI、LVDS、MIPI、EDP四种显示接口的多屏同显、异显和异触,可有效提高行业定制的拓展性。 iTOP-RK3568开发板支持以下屏幕: 迅为 LVDS 7 寸屏幕 迅为 LVDS …

【数学】三角函数小题

∣三角函数小题NightguardSeries.∣\begin{vmatrix}\huge{\textsf{ 三角函数小题 }}\\\texttt{Nightguard Series.}\end{vmatrix}​ 三角函数小题 Nightguard Series.​​ 以下是一些废话 不愿意看的可以跳过 最近守夜人更新得很慢,守夜人拖更主要有三个原因&#…

Hudi(1):Hudi概述

目录 0. 相关文章链接 1. Hudi简介 2. 发展历史 3. Hudi特性 4. 使用场景 4.1. 近实时写入 4.2. 近实时分析 4.3. 增量 pipeline 4.4. 增量导出 0. 相关文章链接 Hudi文章汇总 1. Hudi简介 Apache Hudi(Hadoop Upserts Delete and Incremental&#xff0…