SpringBoot配置文件、YAML语法、配置文件值的注入

  • Post author:
  • Post category:其他




SpringBoot配置文件



1、配置文件


SpringBoot使用一个全局配置文件,这个文件的文件名是固定的,存放于src/main/resources目录或者类路径/config下

  • application.properties
  • application.yml

配置文件的作用:配置文件可以修改一些SpringBoot自动配置的默认配置信息。



2、YAML语法

以配置端口号为例,看看.yml文件和.xml文件的配置格式

.yml:

server:
  port: 8081

.xml:

<servler>
    <port>8081</port>
</servler>

YAML以数据为中心,比xml,json等更适合做配置文件



2.1、YAML基本语法

key:(空格)value:表示一组键值对,

空格必须要有


以空格的缩进来控制层级关系,只要是左对齐的一列数据,就是同一层级的数据。缩进时,不允许使用Tab键,只允许使用空格

server:
  port: 8081
  path: /hello
# port和path是同一层级

属性和值也是大小写敏感的!



2.2、值的写法

YAML支持的三种数据结构:字面量(单个的,不可再分的值),数组(一组按次序排列的值),对象(键值对的集合)



2.2.1、字面量:普通的值(数字,字符串,布尔值)

  • 一般都是通过key: value来写的
  • 字符串默认不用加上单引号或者双引号

“”双引号:字符串中的特殊转义字符会转义,比如“A \n B”,输出:A (换行) B

”单引号:字符串中的特殊转移字符不会转移,比如‘A \n B’,输出:A \n B



2.2.2、数组(List,Set)

用- 表示数组中的一个元素

hobby:
  - basketball
  - playGames
  - football

行内写法:

hobby: [basketball,palyGames,football]



2.2.3、对象、Map(键值对)

map:
  key1: value1
  key2: value2

行内写法:

map: {key1: value1,key2: value2}



2.2.4、文档块

使用—分开

在这里插入图片描述



2.3、配置文件值的注入

javabean:

public class Person {
    private String name;
    private int age;
    private String sex;
    private Date birthday;

    private Pet pet;
    private List hobby;
    private Map<String,Object> map;
// get、set、toString方法省略
}

.yml配置文件:

person:  name: "灭霸"  age: 666  sex: 男  birthday: 6666/66/66  pet:    name: "旺财"    age: 6  hobby:    - "打响指"    - "还是打响指"    - "打代码"  map:    key1: value1    key2: value2

配置文件写好之后,怎么把配置文件的值注入进去呢?我们可以使用这个注解:

@ConfigurationProperties,但是前提是,这个类需要是Spring容器中的组件,只有这个类注入到容器中,成为Spring容器的组件,才能使用容器提供的@ConfigurationProperties功能

@Component@ConfigurationProperties(prefix = "person")public class Person {...}

@ConfigurationProperties(prefix = “person”):告诉Springboot将本类中的属性与配置文件中的相关配置进行绑定。

prefix = “person”:指明需要跟配置文件中哪个(person)下面的所有属性进行一 一映射



2.3.1、properties文件在idea中默认utf-8可能会出现乱码

可以进行以下设置:

在这里插入图片描述



2.3.2、@value获取值与@ConfigutationProperties获取值


@value和@ConfigutationProperties都可以实现配置文件值得注入

如果不使用@ConfigutationProperties,我们可以在属性上添加@Value来注入配置文件中的值,但是

每次只能注入一个

@Value("${person.name}")
private String name;
@Value("#{5*5}")
private int age;

用#{表达式}也可以注入值,不用根据配置文件。

  • 区别:
@ConfigutationProperties @value
功能 批量注入配置文件中的值 一个一个地注入
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • .yml配置文件和.properties配置文件都能获取到值。

    • 如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
    • 如果是需要获取配置文件中的多个值或者专门写一个JavaBean来和配置文件进行映射,使用@ConfigurationProperties
  • 使用JSR303数据校验,@Validated
  • @Value(”${(无法支持复杂类型,如map)}“),@Value获取不到配置文件中对应的map属性的值



2.3.3、@PropertySource和@ImprotResource和@Bean

@PropertySource:

加载指定的配置文件。只能用于读取.properties配置文件

# 文件名person.properties
person.name="钢铁侠"
person.age=23

加载配置文件,在需要注入的类上标注@PropertySource

Person类:

@Component
@ConfigurationProperties(prefix = "person")
@PropertySource(value = {"classpath:person.properties"})
public class Person {...}

即可记载指定的.properties配置文件。



版权声明:本文为Ai_Answer_zr原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。