关于Spring Boot的配置文件

Spring Boot 配置文件


  • Spring Boot 使用一个全局的配置文件,配置文件名是固定的
    • application.properties
      • 语法结构:key=value
    • application.yaml/yml
      • 语法结构:key:空格 value
  • 配置文件的作用:修改 Spring Boot 自动配置的默认值

YAML


  • YAML 是 “YAML Ain’t a Markup Language”( YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名
  • YAML 对空格要求十分严格
  • 可以配置以下数据
#普通键值
name: liming
#对象
student:
  name: liming
  age: 17
#对象行内写法
student: {name: liming,age: 17}
#数组
student:
  - liming
  - lihua
  - libai
#数组行内写法
student: [liming,lihua,libai]
#简单判断并注入数据(去改配置文件中student对象的name值,如果不存在则取默认值libai)
name: ${student.name:libai}
#随机数(long,value,int,uuid等)
age: ${random}
  • 也可以用于给实体类赋值

给实体类赋值的方法

@Value
  1. 在实体类中通过 @Value 给属性赋值
@Component
public class Dog {
    @Value("小白白")
    private String name;
    @Value("3")
    private Integer age;
}
  1. 使用 @Autowired 将实体类装配并测试
@SpringBootTest
class Springboot01ApplicationTests {
    @Autowired
    private Dog dog;

    @Test
    void contextLoads() {
        System.out.println(dog);
    }
}

在这里插入图片描述

@ConfigurationProperties
  • 通过配置文件给属性赋值,将配置文件中配置的每一个属性的值,映射到这个组件中
  • 告诉 springboot 将本类的所有属性和配置文件中相关的配置进行绑定
  • 参数 prefix 取配置文件中与该实体类对应的类名
  • 只有这个组件是容器中的组件(即标注 @Component 注解),才能使用容器提供的 @ConfigurationProperties 功能
  1. YAML 配置文件
person:
  name: 小明
  age: 22
  happey: true
  birthday: 1999/10/10
  maps: {k1: v1,k2: v2}
  lists: [music,readbook,games]
  dog: {name: 灰灰,age: 3}
  1. 实体类
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private boolean happy;
    private Date birthday;
    private Map<String ,Object> maps;
    private List<Object> lists;
    private Dog dog;
}
  1. 测试
@SpringBootTest
class Springboot01ApplicationTests {
    @Autowired
    private Person person;

    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

在这里插入图片描述

@PropertySource
  • 加载指定的配置文件
  • 使用 SPEL 表达式取出
  1. properties 配置文件
name=小黑
  1. 实体类
@Component
@PropertySource(value = "classpath:application.properties")
public class Dog {
    @Value("${name}")
    private String name;
    private Integer age;
}
  1. 测试
@SpringBootTest
class Springboot01ApplicationTests {
    @Autowired
    private Dog dog;

    @Test
    void contextLoads() {
        System.out.println(dog);
    }
}

在这里插入图片描述

YAML 和 properties 的区别

YAMLproperties
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SPEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持
松散绑定
  • YAML 中的 user-name 和实体类中的 userName 可以匹配绑定
JSR303 数据校验
  • 需要添加对应的启动器
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • @Validated 数据校验
    • 在属性名上加上注解即可开启相应的属性格式校验

在这里插入图片描述
在这里插入图片描述

配置文件的位置选择


  • 以下四个位置都可以编写配置文件,优先级依次下降
    1. file:./config/
    2. file:./
    3. classpath:/config/
    4. classpath:/

在这里插入图片描述

多环境配置


  • profile 是 Spring 对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境
  • 多个 YAML 配置文件可以写在一起(用 — 分隔),也可以分开编写
server:
  port: 8081
#激活指定的配置模块
spring:
  profiles:
    active: dev
#(---)新建一个模块,可以看成另一个配置问阿金
---
#模块起名
spring:
  profiles: test
server:
  port: 8082
---
spring:
  profiles: dev
server:
  port: 8083

配置文件配置的内容


  • 由 spring.factories 核心自动装配文件中的 xxxAutoConfiguration 自动装配默认值

在这里插入图片描述

  • 可以通过修改 xxxAutoConfiguration 中 xxxProperties,改变默认值

在这里插入图片描述
在这里插入图片描述

  • xxxProperties 与配置文件绑定,所以修改配置文件就自定义配置

在这里插入图片描述

#查看自动配置类的生效情况
debug: true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值