Spring Boot 配置文件

本文详细介绍了Spring Boot的配置文件类型,包括YAML的基本概念和数据类型。接着讲解了配置文件的赋值方式,比较了@Value和@ConfigurationProperties的差异,并强调了@ConfigurationProperties在复杂类型封装和数据校验上的优势。最后,讨论了配置文件的路径和多配置文件的使用方法,以及如何激活指定配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、配置文件类型

1.1、 application.properties

语法: key=value

1.2、 application.yml

语法: key:[空格]value

2、 YAML

2.1、什么是 YAML

YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。 YAML 参考了其他多种语言,包括: C语言PythonPerl ,并从 XML 、电子邮件的数据格式 (RFC 2822) 中获得灵感。 Clark Evans 在2001年首次发表了这种语言,另外 Ingy döt NetOren Ben-Kiki 也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。

2.2、相关数据类型

2.2.1、普通键值对

语法

key:[空格]value

示例

name: zhangsan
2.2.2、对象

语法

# 普通方式
object: 
[Tab]property: value
[Tab]property: value
# 行内形式
object: {property: value,property: value}

示例

person:
  name: zhangsan
  age: 13

person: {name: zhangsan, age: 13}
2.2.3、数组

语法

key:
[Tab]- value
[Tab]- value
# 行内
key: [value,value]

示例

food:
  - rice
  - noodles
  - dumpling

food: [rice,noodles,dumpling]

3、配置文件赋值

3.1、ymal 赋值

3.1.1、新建类

User.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Component
public class User {

    private String name;
    private int age;

}

Person.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;
    private Integer age;
    private Boolean happy;
    private Date birthday;
    private Map<String, Object> map;
    private List<Object> lists;
    private User user;

}
3.1.2、配置文件
person:
  name: 张三
  age: 3
  happy: false
  birthday: 2020/7/10
  map: {one: 哈哈, two: 12, three: false}
  lists:
    - 哈哈
    - 12
    - true
  user:
    name: 李四
    age: 13
3.1.3、测试结果
Person(name=张三, age=3, happy=false, birthday=Fri Jul 10 00:00:00 CST 2020, map={one=哈哈, two=12, three=false}, lists=[哈哈, 12, true], user=User(name=李四, age=13))

3.2、 properties 赋值

3.2.1、 新建配置文件

user.properties

name=张三
age=13
3.2.2、在类中配置

User.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Component
@PropertySource("classpath:user.properties") // 指定配置文件
public class User {

    @Value("${name}") // 使用SPEL表达式取出值
    private String name;
    @Value("${age}")
    private int age;

}
3.2.3、测试
User(name=张三, age=13)

3.3、方式对比

@ConfigurationProperties@Value
功能批量注入配置文件中的属性单独指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持
  • cp 只需要配置一次即可, value 注解需要每一个字段都添加
  • 松散绑定:若 yaml 中属性为 last-name ,与 lastName 是相同的。
  • JSR303 数据校验:在字段增加一层过滤器验证,可以保证数据的合法性
  • 复杂类型封装, yaml 可以封装对象, value 注解不支持

3.4、 JSR303 数据校验

Spring Boot 中可以使用 @Validated 校验数据,若数据异常则会同意抛出异常,方便异常中心统一处理。

通俗来讲就是可以指定一个属性的值为指定格式或类型。

测试

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

    @Email(message = "你这邮箱地址不对吖")
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birthday;
    private Map<String, Object> map;
    private List<Object> lists;
    private User user;

}

结果

Property: person.name
Value: 张三
Origin: class path resource [application.yaml]:2:9
Reason: 你这邮箱地址不对吖

4、配置文件

4.1、配置文件路径

以下是可以放置配置文件的路径,优先级从高到低,高优先级配置文件会覆盖低优先级配置文件。

  1. file:./config/
  2. file:./config/*/
  3. file:./
  4. classpath:/config/
  5. classpath:/

4.2、多配置

yaml 中可以使用 --- 分隔多个相同的配置

server:
	port: 8081
---
server:
	port: 8082

指定多个配置名

spring:
	profiles: name

激活指定配置名的配置

spring:
	profiles:
		active: name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌尘吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值