IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 即使java27岁了,但我还得去这个yaml -> 正文阅读

[Java知识库]即使java27岁了,但我还得去这个yaml

🏇 学 习 S p r i n g B o o t \textcolor{Orange}{学习SpringBoot} SpringBoot
🙏 学 习 过 程 中 的 笔 记 , 方 便 查 阅 学 习 \textcolor{green}{学习过程中的笔记,方便查阅学习} 便💗
🍣 如 果 在 其 中 需 要 我 的 源 码 , 可 以 私 聊 我 \textcolor{green}{如果在其中需要我的源码,可以私聊我} 🍣
欢迎各位小伙伴😄关注👍点赞??收藏📝留言

#springboot这个配置文件中到底可以配置哪些东西呢?

我们创建项目的时候默认的配置文件是application.properties,我们经常使用的是yaml文件。我们可以将之前的删除,然后创建一个application.yml文件来作为配置文件。

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

  • application.properties

    • 语法结构 :key=value
  • application.yml

    • 语法结构 :key:空格 value

    • 这里的空格一定要有,否则就会报错

    • server:
        port: 8081
      

配置文件的作用 : 修改SpringBoot自动配置的默认值,SpringBoot在底层已经都自动配置好了,所以我们只需要修改即可。

#springboot这个配置文件中到底可以配置哪些东西呢?

1. 概述与语法

以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置

传统xml配置:

<server>
    <port>8081<port>
</server>

yaml配置:

server:
  port: 8080

yaml中的语法

yaml中对语法要求严格!

1、空格不能省略

2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

3、属性和值的大小写都是十分敏感的。

我们也可以对比一下properties的一个配置

properties

#只能保存键值对
name = wangmm

pig.name = wangmm
pig.age = 23

yaml

#普通的key-value键值对
name: wangmm
#对象
pig:
  name: wangmm
  age: 23
  
#行内写法
pig: {name: wangmm,age: 23}

#数组
pets:
  - cat
  - dog
  
#行内写法
pets: {cat,dog}

2. 给属性赋值

最强大的功能:可以注入到我们的配置类中。yaml可以直接给实体类赋值

2.1 通过以前的方式

编写一个实体类Dog

//把这个添加到底层组件里面
//注册bean到容器中
@Component
public class Dog {
    private String name;
    private Integer age;
    //有参、无参、get、set、toString方法。
}

通过@Value给bean注入属性值

//把这个添加到底层组件里面
//注册bean到容器中
@Component
public class Dog {
    @Value("heidou")
    private String name;
    @Value("3")
    private Integer age;
    //有参、无参、get、set、toString方法。
}

这里拥有springboot自带的测试。我们可以在这里进行测试。最终我们可以得到结果

在这里插入图片描述

在这里插入图片描述

2.2 通过yml来进行

person:
  name: wangmm
  age: 23
  happy: true
  birth: 2000/01/10
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - music
    - girl
  dog:
    name: heidou
    age: 2

在这里插入图片描述

如果在这里输入@ConfigurationProperties报错,可以点击方框那里配置产生提示

如果不配置使用了这个注解,就会提示爆红

在这里插入图片描述

点进去之后就会出现提示,让你添加一个依赖。导入之后就没有了。

在这里插入图片描述

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

这里就需要和yml中的person进行配对

@ConfigurationProperties作用: 将配置文件中配置的每一个属性的值,映射到这个组件中;告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应

在这里插入图片描述

实体类和yaml中的一定要一一对应,否则就会成null

运行结果:Person{name='wangmm', age=23, happy=true, birth=Mon Jan 10 00:00:00 CST 2000, maps={k1=v1, k2=v2}, lists=[code, music, girl], dog=Dog{name='heidou', age=2}}

2.3 指定properties

@Component
//加载指定的配置文件;
@PropertySource(value="classpath:application.properties")
public class Person {
    @Value("${name}") //从配置文件中取值
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    //有参无参、set、get、toString()
}

新建一个properties这里我用的名字是application.properties。可以换但是要和实体类上指定配置文件保持一致

name=wangmumu

运行结果:Person{name='wangmumu', age=null, happy=null, birth=null, maps=null, lists=null, dog=null}

乱码问题

properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;

在这里插入图片描述

配置文件占位符

配置文件中可以增加其他的乐趣

## 应用名称
#spring.application.name=hellospringboot
## 应用服务 WEB 访问端口
#server.port=8080
server:
  port: 8081

person:
  name: wangmm${random.uuid} # 随机uuid
  age: ${random.int}  # 随机int
  happy: true
  birth: 2000/01/10
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - music
    - girl
  dog:
    name: ${person.hello:gg}_heidou
    age: 2

运行结果:Person{name='wangmm33007242-3632-48c0-8af3-f2a0a346e8e2', age=-1532006560, happy=true, birth=Mon Jan 10 00:00:00 CST 2000, maps={k1=v1, k2=v2}, lists=[code, music, girl], dog=Dog{name='gg_heidou', age=2}}

这里,狗的名字会先去找person.hello,如果有那就将是它的值,如果没有就是gg

两种对比

在这里插入图片描述

1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

2、松散绑定:比如yml中写的last-style,这个和lastStyle是一样的,-后面跟着的字母默认是大写的。这就是松散绑定。Value是不行的,但是@ConfigurationProperties是可以的

3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value不支持

如果我们只需要获取配置文件中的某个值,可以使用一下 @value;否则还是用@ConfigurationProperties为好

3. JSR303数据校验

根据之前的知识,我们在类上添加数据校验@Validated,然后在需要的字段前面添加@Email()

如果出现这个爆红,可以在依赖中导入validation

在这里插入图片描述

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

如果我们什么都没改的话,会出现这个问题

在这里插入图片描述

说明我们的不是默认的Email邮件地址。

我们也可以修改默认的信息@Email(message = "用户名格式不合法")这样出来的提示信息就是自己所写的。

我们将yml文件中name修改成邮箱地址后就可以成功运行了

在这里插入图片描述

这里引用一下大佬的总结我们常用的JSR-303校验

@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 DateCalendar 对象是否在当前时间之前  
@Future     验证 DateCalendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等

4. 配置文件加载位置

根据官方文档显示,我们的配置可以在以下四个地方中进行配置。

在这里插入图片描述

引用狂神

但是会有优先级的问题,我们可以在上述四个路径下配置端口进行测试,最终发现

  • 优先级1:项目路径下的config文件夹配置文件
  • 优先级2:项目路径下配置文件
  • 优先级3:资源路径下的config文件夹配置文件
  • 优先级4:资源路径下配置文件

SpringBoot会从这四个位置全部加载主配置文件;互补配置;

5. 环境切换

在生产环境中会遇到各种环境,那么当要在不同环境中运行时就需要不同的端口或者环境配置

5.1 properties

在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;

例如:

application-test.properties 代表测试环境配置

application-dev.properties 代表开发环境配置

但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件

我们需要通过一个配置来选择需要激活的环境:

#比如在配置文件中指定使用dev环境,可以通过设置不同的端口号进行测试;
#启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev

5.2 yml

yml相对于properties会有更大的优势,比如

server:
  port: 8081
#选择要激活那个环境块
#可以有,也可以不写,不写就是默认的
spring:
  profiles:
    active: dev

---
server:
  port: 8082
spring:
  profiles: dev #配置环境的名称


---

server:
  port: 8083
spring:
  profiles: test  #配置环境的名称

注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 17:59:01  更:2022-05-24 18:00:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:41:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码