Spring中的那些配置文件详解

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中的那些配置文件详解相关的知识,希望对你有一定的参考价值。

文章目录

从SpringBoot开到SpringCloud,我们先来看看有哪些配置文件:

先看看遇到过哪些配置文件

Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 两种格式的配置文件,yml 和 properties 文件都属于配置文件,功能一样

Spring Cloud 构建于 Spring Boot 之上,在 Spring Cloud 中有两种上下文,一种是 bootstrap,另外一种是 application,下面列举这两种配置文件的区别,Spring Cloud 总一般使用.yml

所以

SpringBoot:
	application.yml 
	application.properties
SpringCloud:
	bootstrap.yml
	application.yml
	(SpringCloud大多是使用.yml文件配置的,properties也可以,这里不算了就)

properties

创建SpringBoot项目后会自动生成一个配置文件,在该文件中,信息以键值对的形式进行储存。

# 配置项目的信息
# key=value
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mengmeng?
characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

但是这样有很大的弊病:对于同一个对象的多个属性进行设置时很麻烦,需要多次重复,存在冗余配置项。

如下,当我们想要设置同一个对象很多的信息时,需要多次重复这个信息:

yml

yml是YMAL的缩写,全称是 Yet Another Markup Language,另一种标记语言。

YMAL是一个可读性高、易于理解、用来表达数据序列化的格式。

YMAL的作用是可以做到跨语言使用,不仅Java中可以使用,Go和python中都可以使用。

1. 语法格式:

  • key: value表示键值对关系,冒号后面必须加一个空格
  • 大小写敏感
  • 缩进时不允许使用tab键,只能用空格
  • 左对齐的一列数据就表示同一级
  • 松散表示,java使用驼峰命名,而用原名或者-代替都可以正确映射,比如java中的名称是lastName,yml中使用lastName或者last-name都可以映射到。

2. 键值关系

#  通常写法:
student: 
  id: 1
  name: 张三
  age: 20


# 行内写法
student:  id: 1,name: 张三, age: 20

yml中,字符串默认不需要加上单引号或者双引号

使用双引号:不会转义字符串中的特殊字符,特殊字符会作为本身想要表达的意思:比如 name: “zhangsan \\n 23”,会输出:zhangsan 换行 23
使用单引号:会转义特殊字符,特殊字符失去特殊作用变成普通字符。

在配置文件中,它是以键值对的形式储存信息的,如果是自己配置的信息,你可以在遵循key-value的格式下,定义任何名称的key。

3. 简单用法

使用YML连接数据库:

sping:
  datasource:
    url:jdbc: mysql://127.0.0.0:3306/database?characterEncoding=tuf8
    username: root
    password: root

表示常用的字面量:

# 普通字面量
name: yyl
age: 18

#布尔类型
flag: true

#日期
date: 2022/09/15

# 同一个对象的多个属性
people:
  name: lisa
  age: 20
# 数组
# 用 -表示数组中的一个元素
pets:
  - cat
  - dog
  - pig
# 行内写法
petss: [dog,cat,pig]

# list对象、set对象、数组对象
students:
  - name: zhangsan
    age: 22
  - name: lisi
    age: 20
  - name: wangwu,age: 18

加载顺序

SpringBoot中:application.properties的优先级大于application.yml

对于.properties与.yml:这两种格式的配置文件可以共同存在于一个项目中,但一般情况下我们会统一格式,只使用其中的一种,来降低故障率。
.properties是最早期的SpringBoot配置文件的格式,也是现在默认的配置文件格式,出现的时间早于.yml。
当这两个配置文件中出现相同的配置时,会优先执行.properties中的配置,然后再执行.yml中的配置,即.properties的优先级大于.yml

SpringCloud中:bootstrap.yml 先于 application.yml加载

若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载,application.yml后加载

这是因为:bootstrap.yml 用于应用程序上下文的引导阶段;bootstrap.yml 由父Spring ApplicationContext加载。

配置区别

SpringBoot中除了格式不一样没什么区别,这里不写了。

SpringCloud中:bootstrap.yml 和 application.yml 都可以用来配置参数。

bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootstrap.yml 被加载,则内容不会被覆盖。

application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等

属性覆盖问题

启动上下文时,Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文。

它有对应的依赖包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-context</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>

初始化的时候,Bootstrap Context 负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的 Environment。Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖

也就是说如果加载的 application.yml 的内容标签与 bootstrap 的标签一致,application 也不会覆盖 bootstrap,而 application.yml 里面的内容可以动态替换。

bootstrap.yml典型的应用场景

  1. 当使用 Spring Cloud Config Server 配置中心时,这时需要在 bootstrap.yml 指定 spring.application 配置文件中n.name 和 spring.cloud.config.server.git.uri,添加连接到配置中心的配置属性来加载外部配置中心的配置信息,例如配置nacos注册中心:

  2. 一些固定的不能被覆盖的属性

  3. 一些加密/解密的场景

以上是关于Spring中的那些配置文件详解的主要内容,如果未能解决你的问题,请参考以下文章

spring整合mybatis多数据源下部分配置(下划线转驼峰)失效问题

springboot 中配置文件加载信息不能是“驼峰命名”

springboot 中配置文件加载信息不能是“驼峰命名”

spring boot+mybatis注解使用方式(无xml配置)设置自动驼峰明明转换(),IDEA中xxDao报错could not autowire的解决方法

Mybatis 开启驼峰式命名规则的映射

恳请spring配置文件逐条详解,详见问题补充。