六 SpringBoot的配置文件

SpringBoot的配置文件

  • Spring Boot 使用一个全局配置文件,放置在 src/main/resources 目录或类路径的 /config 下;
    • application.properties 语法:key = value
    • application.yml 语法:key: value
  • yml 是 YAML(YAML Ain’t Markup Language)不是一个标记语言;
  • yaml配置和 properties 可以同时配置!
  • properties的优先级要大于yaml

6.1 YML

  • YML配置以 数据为中心

  • 基本语法

    • 键值对形式 key: value (冒名后面必需要有空格)
    • 空格,缩进,大小写严格区分
  • 字符串说明 双引号转义生效,单引号转义不生效

    name: "yao\sang"
    结果:
    yao
    sang
    
    name: 'yao\sang'
    结果:
    yao\sang
    
  • 对象&map

    • 正常写法
    employee:
      username:"小张"
      age:20
      sex:true
    
    • 一行写法(json)
    employee: {username: "小张",age: 20}
    
  • 数组与list

    • 正规写法
    hobbys:
      - music
      - song
      - basketball
    
    • 一行写法
    hobbys: [music,song,basketball]
    

6.2 配置文件注入值

在SpringBoot底层所有配置类都使用的是 @ConfigurationProperties!

yml注入数据

  • 准备相应的类
/**
 * @ConfigurationProperties 告诉SpringBoot将配置文件中对应属性的值,映射到这个组件类中,进
 * 行一一绑定
 *    prefix = "emp":配置文件中的前缀名,哪个前缀与下面的所有属性进行一一映射
 */
@Component
@Data
@ConfigurationProperties(prefix="employee")
public class Employee {

    private String name;
    private Integer age;
    private Date bornDate;
    private Boolean sex;
    private Map map;
    private List list;
    private Department department;
}

@Data
public class Department {
    private String name;
    private String address;
}
  • 完成配置 application.yml
employee:
  name: "小东"
  age: 20
  bornDate: 1998/08/23
  sex: true
  map: {k1: v1,k2: v2}
  list: [23,45,7]
  department:
    name: xx
    address: dee
  • 使用springboot测试类
@SpringBootTest
class Springboot01HelloApplicationTests {
    @Autowired
    private Employee employee;
    @Test
    void contextLoads() {
        System.out.println(employee);
    }
}
  • 导入配置文件处理器,然后重新运行测试类,在编写配置文件时就会提示
<!--导入提示信息的配置文件-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

传统的properties配置使用以下配置

@PropertySource("classpath:user.properties")

properties 配置文件注入数据

  • application.properties加入数据
employee.age=6
employee.name=yao
employee.born-date=2009/07/12
employee.map.k1=value1
employee.map.k2=value2
employee.list=34,56,78
employee.department.name=IT部
employee.department.address=四川
  • 运行后我们可以看到这里出现了乱码问题,解决方案如下

@Value 和 @ConfigurationProperties 的比较

  • 使用 @Value 获取值
@Component
@Data
//@ConfigurationProperties(prefix="employee")
public class Employee {
    @Value("${employee.name}")
    private String name;
    @Value("#{10*2}")
    private Integer age;
    private Date bornDate;
    @Value("true")
    private Boolean sex;
    private Map map;
    private List list;
    private Department department;
}
  • @Value 与 @ConfigurationProperties 获取值的区别
 @ConfigurationProperties@Value案例
功能批量注入单个指定
松散绑定支持不支持last_name == lastName
last-name == lastName
SpEL不支持支持#{10*2}
复杂类型封装支持不支持employee.list
JSR303数据校验支持不支持

6.3 加载指定配置文件

加载局部配置文件@PropertySource

  • @ConfigurationProperties 默认所有的数据都从application配置文件中获取,这样操作会导致这个配置文件太过于臃肿,我们可以把这个东西放到局部的配置文件中去
  1. 新建一个 employee.properties文件
employee.age=6
employee.name=yao
employee.born-date=2009/07/12
employee.map.k1=value1
employee.map.k2=value2
employee.list=34,56,78
employee.department.name=IT部
employee.department.address=四川
  1. 类上加上指定配置
@Component
@Data
//指定到相应的文件中去获取数据
@PropertySource({"classpath:employee.properties"})
@ConfigurationProperties(prefix="employee")
public class Employee {
    private String name;
    private Integer age;
    private Date bornDate;
    private Boolean sex;
    private Map map;
    private List list;
    private Department department;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值