1. 介绍
  1. 官方配置文档
  2. 创建工程后默认在resources下有一个application.properties文件
  1. 推荐将该文件改为.yml文件
  2. 名字默认为application,不建议修改
  1. Spring Boot通常使用两种格式的配置文件
  1. application.properties
server.port=8080
server.servlet.context-path=/api/v1
  1. application.yml
server:
  port: 8080
  servlet:
    context-path: /api/v1
2. 常用配置文件位置
  1. spring boot 的配置文件可以在classpath下,也可以在指定的路径
  2. 加载顺序
  1. 首先在classpath:/config/查找配置文件
  2. 然后在classpath:下查找配置文件
  1. 当同级目录下同时有application.propertiesapplication.yml文件,properties文件的属性会覆盖掉.yml文件的属性
3. 获取自定义属性
  1. @Value单值获取
  1. application.yml
user:
  username: 老王
  age: 18
  email: abc@126.com
  1. JavaBean
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class UserConfig {
    @Value("${user.username}")
    private String name;
    @Value("${user.age}")
    private Integer age;
    @Value("${user.email}")
    private String email;
}
  1. 单元测试
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@Slf4j
@SpringBootTest
public class UserConfigTest {
    @Resource
    private UserConfig userConfig;

    @Test
    public void test() {
        log.info(userConfig.toString());
    }
}

结果:

spring boot 默认 用户名密码登录页面_spring

之所以转为了Unicode,是因为老王没有加双引号。

spring boot 默认 用户名密码登录页面_spring_02

spring boot 默认 用户名密码登录页面_java_03

  1. 注意
user:
  username: 老王
  age: 18
  email: abc@126.com
  address:
    - 北京
    - 上海
    - 广州
  1. username的这个key不能写成name,不然获取的是电脑用户名
  2. 不能获取复杂类型的值,比如获取address的值报错
  1. @ConfigurationProperties批量获取
  1. application.yml
user:
  username: "老王"
  age: 18
  email: abc@126.com
  address:
    - "北京"
    - '上海'
    - "广州"
  1. JavaBean
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Data
@ConfigurationProperties("user")
@Component
public class UserConfig {
    private String name;
    private Integer age;
    private String email;
    private List<String> address;
}
  1. 单元测试
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@Slf4j
@SpringBootTest
public class UserConfigTest {
    @Resource
    private UserConfig userConfig;

    @Test
    public void test() {
        log.info(userConfig.toString());
    }
}

结果:

spring boot 默认 用户名密码登录页面_配置文件_04

上海用了单引号''依然转为了Unicode

spring boot 默认 用户名密码登录页面_配置文件_05

  1. 注意
  1. @ConfigurationProperties可以获取集合的值
  2. 单引号''依然会转码,双引号""不会
  3. 要使用@Component或者@ConfigurationJavaBean标记为配置类,配置才会生效
  1. @Value以及@ConfigurationProperties对比

说明

@ConfigurationProperties

@Value

作用

批量获取配置文件中的属性

单值获取

松散绑定(松散语法)

支持

不支持

SpEL

不支持

支持

JSR303数据校验

支持

不支持

复杂类型封装

支持

不支持

  1. 松散语法
  • JavaBean中的驼峰命名,在yml中用单词小写-连接
  • 比如private Strng contextPathyml中可以对应为context-path,也可以对应驼峰命名法
  • 推荐在yml配置中使用松散语法,用于区分
4. 多配置文件
  1. 主配置文件文件名是application-{profile}.properties/yml,默认使用application.properties的配置,推荐使用yml配置
  1. 在项目的配置文件,可以为了解耦生产测试分开配置
# 主配置文件
application.yml
# druid 配置文件
application-druid.yml
# mybatis 配置文件
application-mybatis-plus.yml
# 开发环境配置文件
application-dev.yml
# 生产环境配置文件
application-prod.yml
  1. 两种方式指定配置文件
  1. 主配置文件application.yml中使用spring.profiles.active属性指定
spring:
  profiles:
    active: dev,druid,mybatis-plus
  1. 项目打包为jar后,通过命令行参数的方式指定配置文件
java -jar app.jar --spring.profiles.active=prod