SpringBoot 统一配置管理

一.properties配置文件

1.基本语法

properties 采用键值的格式来配置的,key与value之间是由‘=’连接的。

比如配置端口号:

server.port=80 

我们可以在properties配置文件中写官方规定好的,内容由很多,大家可以自行翻阅官方文档:Common Application Properties :: Spring Boot

我们还可以自定义一些键值对,语法也是一样。

myData=123

2.读取配置文件

读取配置文件的内容时,我们要使用 @Value 注解。

@Value 的格式,@Value("${名称}"),在{}内写入我们在配置文件中自定义内容的名称即可。

比如我们在配置文件中自定义写了一个:

myData=123

读取配置文件:

@Value("${myData}")
private String myData;
//名字随意,写成下面这样也能读取到
private String mydata;

在Spring Boot项目中读取properties配置文件时,读取到的数据默认情况下是字符串类型,但Spring Boot具备自动类型转换的能力,可将这些字符串数据转换为其他合适的数据类型。

还是上面的例子,这样也是可以的:

@Value("${myData}")
private int myData;

但是如果我们将myData的类型改成Boolean,那就会报错:

二.YAML配置文件

1.格式介绍

YAML(YAML Ain’t Markup Language)是一种基于层次结构的数据序列化格式。yml和yaml都是YAML的扩展名,两者在绝大多数情况下功能和作用是相同的,两者的语法也是相同的。

如果同时存在application.properties和application.yml(.yaml) ,properties的优先级更高

properties配置文件会产生很多冗余信息,像下面的:
 

spring.jdbc.datasource.driverClassName=com.mysql.cj.jdbc.driver
spring.jdbc.datasource.url=jdbc:mysql:///springboot_01
spring.jdbc.datasource.username=root
spring.jdbc.datasource.password=root

如果我们使用就不会产生冗余信息:

spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql:///springboot_01
      username: root
      password: root

2.基本语法

yml的是属性结构的配置文件,通过缩进来表示层级。写法是:

#单层
key: value
#多层
key:
  key1: value1
  key2: value2

这里要注意,: 与value之间有一个空格,这个空格是必须写的

 yml配置null:

myData: ~

yml配置空字符串:

#单引号双引号都可以
myData: ''
myData: ""

yml配置集合:

#通过 - 来连接,注意 - 后也有空格
student:
  name:
    - Tom
    - Jack

3.读取配置文件

读取的方法与properties配置文件相同,都是通过@Value("${}")

@Value("${myData}")
private String myData;

但是注意@Value只能读取一个元素,如果要让 @Value 接收一个集合它就干不了了。

这个时候我们就要使用批量引入配置属性的注解:@ConfigurationProperties,这个注解将配置文件里的属性绑定到Java Bean上。

我们使用 @ConfigurationProperties 有个非常重要的点要注意,我们必须写 Setter 方法

因为Spring Boot是通过反射机制来实现这种绑定的。Spring Boot 在绑定配置属性时,会调用 Java Bean 类中对应的 Setter 方法将配置文件中的属性值设置到对象的字段中。如果没有提供 Setter 方法,Spring Boot 就无法将配置属性的值设置到对象的字段中,从而导致绑定失败。

这个时候我们可以引入 Lombok 来一键生成,相当方便。

此外 @ConfigurationProperties 要加在类上,这个注解是将属性放入Bean中,所以这个类必须放入容器中才能绑定

例子一,配置对象:

@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    public int id;
    public String name;
}
student:
  id: 1
  name: Tom

例子二,配置集合:

@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    public List<String> name;
    public Map<String,String> map;
}
student:
  name:
    - Tom
    - Jack
  map:
    key1: value1
    key2: value2

4.YAML的优势

1)层次结构:YAML文件使用缩进和冒号来表示层次结构,使得数据之间的关系更加清晰和直观。这样可以更容易理解和维护复杂的配置,特别适用于深层次嵌套的配置情况。

2)自我描述性:YAML文件具有自我描述性,字段和值之间使用冒号分隔,并使用缩进表示层级关系。这使得配置文件更易于阅读和理解,并且可以减少冗余的标点符号和引号。

3)注释支持:YAML格式支持注释,可以在配置文件中添加说明性的注释,使配置更具可读性和可维护性。相比之下,properties文件不支持注释,无法提供类似的解释和说明。

4)多行文本:YAML格式支持多行文本的表示,可以更方便地表示长文本或数据块。相比之下,properties文件需要使用转义符或将长文本拆分为多行。

5)类型支持:YAML格式天然支持复杂的数据类型,如列表、映射等。这使得在配置文件中表示嵌套结构或数据集合更加容易,而不需要进行额外的解析或转换。

6)更好的可读性:由于YAML格式的特点,它更容易被人类读懂和解释。它减少了配置文件中需要的特殊字符和语法,让配置更加清晰明了,从而减少了错误和歧义。 

三.多环境配置和使用

在Spring Boot中,可以使用多环境配置来根据不同的运行环境(如开发、测试、生产)加载不同的配置。SpringBoot支持多环境配置让应用程序在不同的环境中使用不同的配置参数,例如数据库连接信息、日志级别、缓存配置等。 也就是说我们可以自行调用不同的配置文件。

这里我们基于YAML的配置文件来实现多环境配置。

先创建一个 application.properties ,然后再创建 application-dev.yml 、 application-test.yml、 application-prod.yml。

我们可以在 application.properties 中使用 spring.profiles.active 来指定配置文件:

student:
  name:
    - Tom
    - Jack
spring:
  profiles:
    active: test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值