Spring Boot的配置文件

文章目录

Spring Boot 配置文件

  • Spring Boot 的配置文件分为 propertiesyaml 两种形式且必须命名为 application

  • Spring Boot 的配置文件通常放置于 src/main/resources 文件夹下。

propertiesyaml 简单对比:

properties yaml
语法结构 key=value key: value(注意冒号后面需要空格)
文件后缀名 .properties .yaml.yml
级联属性 #用点连接
server.port=9090
# 分层
server:
  port: 9090

一、yaml 语法

1.1 基本语法

# 注释文本
[key]:[空格][value]

# 使用缩进表示层级关系,同层级必须左对齐,缩进空格数不重要,一般使用两个空格
[key1]:
[空格][空格][key2]:[空格][value]

  • 大小写敏感。
  • 数据值前面必须有一个空格作为分隔符。
  • 使用缩进表示层级关系,同层级的元素必须左侧对齐。
  • # 开头表示注释。
spring:
  redis:
    host: localhost
    port: 6379

1.2 值类型

1.2.1 字面量(数字、字符串、布尔)

可以直接书写,不需要加引号,如下:

student:
  name: Jacks
  age: 20
  man: true
  • 字符串默认情况不用加引号,单引号与双引号包裹的字符串含义不同
    • 单引号(‘字符串’):忽略转义字符。
    • 双引号(“字符串”):识别转义字符。

1.2.2 对象或Map

# 写法一
student:
  name: Jacks
  age: 20
  man: true

# 写法二
student: {name: Jacks, age: 20}

1.2.3 数组

# 写法一
fruit:
  - apple
  - orange
  - banana

# 写法二
fruit: [apple,orange,banana]
  • - 值 的形式表示数组中的一个元素。
  • [] 包裹且用,隔开每一个元素。

1.2.4 复合值

  • 复合结构是前三种形式的组合。
yaml:
  value:
    # 字面量写法
    str: 字符串,默认不\n需要加引号,不会转义特殊字符。
    str2: '单引号包裹的字符串不识别转义字符\n,与不加引号效果一样'
    str3: "双引号包裹的字符串会识别转义字符\n"
    num: 666
    dNum: 666.88
    birth: 2020/10/27 12:23:34
    # 集合写法 array、list、set 写法,两种方式都可以
    list:
      - hello
      - world
      - 你好
      - 世界
    set: [ hello,world,你好,世界 ]
    # 对象/map
    map: { name: jacks,age: 22,gender: man}
    # 对象数组
    students:
      - {name: 张三, age: 18}
      - {name: 李四, age: 19}

1.2.5 参数引用

age: 20

# 可以使用 ${} 引用配置文件中的其他项的值
student:
  age: ${age}

二、配置文件属性读取

  • 配置文件
student:
  name: 张三
  age: 20

address:
  - 北京
  - 上海
  - 深圳
  - 广州

2.1 使用 @Value 读取

@RestController
public class YmlController {
    // 获取属性值,${}中匹配配置文件中的 key
    @Value("${student.name}")
    private String username;
    @Value("${student.age}")
    private int age;
    // 获取数组
    @Value("${address[0]}")
    private String address;

    @GetMapping("hello")
    public String hello() {
        System.out.println(username);
        System.out.println(age);
        System.out.println(address);
        return "访问成功:hello";
    }

2.2 使用 org.springframework.core.env.Environment 对象读取

@RestController
public class YmlController {
    @Autowired
    Environment environment;

    @GetMapping("/env")
    public String getEnv() {
        String name = environment.getProperty("student.name");
        String age = environment.getProperty("student.age");
        String address = environment.getProperty("address[0]");
        System.out.println(name);
        System.out.println(age);
        System.out.println(address);
        return "访问成功:hello";
    }
}

2.3 使用 @ConfigurationProperties 读取

@ConfigurationProperties 注解主要用于将实体类对象与配置文件进行绑定,为实体对象注入属性。

  • 首先添加以下依赖,编写配置文件时可以获取智能提示,并且在编译后会根据实体类属性生产JSON文件。
<!-- 让实体类在配置文件中有对应的提示 -->
<!-- 对实体类的属性生成 json 文件,存在于 target/classes/META-INF -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  • 建立实体类
@Data  // lombok,提供 getter 、 setter 等方法
@Component  // 注入到容器,交由 spring 管理
@ConfigurationProperties("person")  // 使用时需要指定前缀
public class Person {
    private String name;
    private String age;
    private List<String> hobby;
}
  • 书写配置文件
person:
  name: jacks
  age: 23
  hobby:
    - 编程
    - 游戏
    - 动漫
  • 测试使用
@RestController
public class YmlController {
    @Autowired
    Person person;

    @GetMapping("person")
    public Person student() {
        return person;
    }
}

三、profile

开发时 Spring Boot 应用时,通常会有开发环境、测试环境和生产环境等不同环境,其数据库地址,服务器端口等等配置都会有差别,为了避免每次打包部署都需要修改配置项,所以提供了 profile 功能来动态切换配置环境。

3.1 多 profile 文件配置

分别创建三个配置文件:

  • 测试环境配置文件:application-test.yml
  • 开发环境配置文件:application-dev.yml
  • 生产环境配置文件:application-pro.yml

需要注意的是,前面的 application 名字是固定的,后面的 -xxx 是自定义的。

激活配置文件,在 application.yml 文件中如下配置:

# 表示激活 application-dev 配置文件,要激活哪个文件,需要匹配后面的 application-xxx.yml 中的xxx
spring:
  profiles:
    active: dev

3.2 yml 多文档

# 激活
spring:
  profiles:
    active: pro
---
# 标识为 default 的配置文件
spring:
  profiles: default

server:
  port: 8081
---
# 标识为 dev 的配置文件
spring:
  profiles: dev

server:
  port: 8082
---
# 标识为 test 的配置文件
spring:
  profiles: test

server:
  port: 8083
---
# 标识为 pro 的配置文件
spring:
  profiles: pro

server:
  port: 8084
  • 单文件中用 --- 分割上下,形成多个文件块。
  • 每个文件块中可以使用 spring.profiles 指定每块文件的名字。
  • 通过 spring.profiles.active 指定激活哪些文件块。

3.3 profile 激活方式

  • 配置文件
spring:
  profiles:
    active: dev
  • 虚拟机参数(VM optionsdd):-Dspring.profiles.active=test

  • 命令行参数:--spring.profiles.active=pro

四、配置文件加载顺序

能被 Spring Boot 应用扫描到的路径优先级从高到低排序:

  • 项目(jar包)同级目录下的 config 目录:file:./config/
  • 项目(jar包)同级目录:file:./
  • 类路径下的config目录:classpath:/config/
  • 类路径下的根目录:classpath:/

所有文件都能被加载,高优先级的配置文件会覆盖低优先级配置文件的内容。

上一篇:uni-app,wex5,APPcan,ApiCloud几款国内webapp开发框架的选型对比


下一篇:WAS常用配置的文件