004.SpringBoot配置文件

189 阅读2分钟

本节目标

  • 加载配置文件的优先级
  • yaml配置中配置不同类型的数据

配置文件形式

在springboot中配置文件有两种形式:properties、yml。新项目中一般采用yml这种形式。

  • properties : 属性文件,key=value形式。
  • yml:YAML语言的文件

Springboot默认会使用一个全局的配置文件(文件名是固定的),application.properties或者application.yml。

这个文件在src/main/resources下。当这个目录下既有application.properties还有application.yml时,那么最终配置项就会以 " properties " 为主,从而忽略了 " yml "。

常见配置

在我们开发web项目时,时长会配置web容器的端口号或者上下文路径【context-path】。而还有哪些配置呢?这里我们就可以查看官网。

image-20230421111725191

从服务属性中,可以看到我们能够配置的属性和作用,如下图:

image-20230421112110079

传送门

属性配置文件

该方式是传统的一种配置文件方式。采用Key=Value的形式。如下:

server.port=8080
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456

yml配置文件

1. 属性配置到yml配置

上面属性文件中配置的内容,采用yml配置。

server:
  port: 8080

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 123456

属性配置文件中的每一个点都代表这里的一个层级。层级才用缩进代表他们之间的父子关系。基本格式要求:

  • 大小写敏感
  • 使用缩进代表层级关系
  • 注意空格
  • 相同的部分只出现一次

2.yml数据类型

  • 单个数据

    # 单个数据
    mykey: 123456
    
    // 获得mykey配置内容
    @Value("${mykey}")
    
  • 对象数据

    # 对象数据
    user1:
      id: 123
      name: 张三
      age: 45
    # 或者
    user2: {id: 234,name: "李四",age: 34}
    
    // 对象配置映射的Bean
    @Data
    @Component
    @ConfigurationProperties(prefix = "user1")
    public class User {
        private Integer id;
        private String name;
        private Integer age;
    }
    
    // 获得对象数据
    @Resource
    private User user;
    
  • 数组

    user3:
      id: 123
      name: 张三
      age: 45
      country:
        - 中国
        - 美国
        - 日本
        - 加拿大
    # 或者
    user4:
      id: 123
      name: 张三
      age: 45
      country: [中国,美国,日本,加拿大]
    

    注意:

    定义list集合不能用@value注解来获取list集合的所有值,如果使用@value注解会报错

配置文件存放位置优先级

  • 项目根目录下的config目录中。 项目A/config目录中(优先级最高)

    • 项目A/config/application.properties
    • 项目A/config/application.yml
  • 项目根目录中(其次)

    • 项目A/application.properties
    • 项目A/application.yml
  • 项目的resources下的config目录中(再次)

    • 项目A/resources/config/application.properties
    • 项目A/resources/config/application.yml
  • 项目的resources中(最后)

    • 项目A/resources/application.properties
    • 项目A/resources/application.yml

代码地址

gitee.com/mayuanfei/S…下的springboot03

记忆印记

  • 不用管什么优先级,直接在resources目录下有一个application.yml即可
  • 对象数据通过@ConfigurationProperties(prefix = "user1")来整型成一个bean
  • @value注解不能获得集合值,需要包在一个对象里