SpringBoot day 1104-三.SpringBoot配置文件

时间:2024-11-05 17:13:56

3.1 三种配置文件及优先级

SpringBoot 约定大于配置 的,所以很多配置都有默认值。
如果想修改默认配置,可以用 application.properties
application.yml(application.yaml) 自定义配置。 SpringBoot
默认从 Resource 目录加载自定义配置文件。
配置文件必须放置在项目的类加载目录下 , 并且名字必须是
application
  • 属性配置文件:application.properties
server . port = 8081
  •  yml文件:application.yml

server :
    port : 8082
  •  yaml文件:application.yaml
server :
   port : 8083
  • 文件加载的优先级 
application.properties > application.yml > application.yaml

3.2 yml配置文件

  • yml介绍 

YML 文件格式是 YAML(YAML Aint Markup Language) 编写的
文件格式。可以直观被电脑识别的格式。容易阅读,容易与脚
本语言交互。可以支持各种编程语言 (C/C++ Ruby
Python Java Perl C# PHP) 。以数据为核心, XML
简洁 。扩展名为 .yml .yaml
  • 配置文件语法
    • 大小写敏感
    • 数据值前边必须有空格,作为分隔符
    • 使用缩进表示层级关系
    • 缩进不允许使用tab,只允许空格
      缩进的空格数不重要,只要相同层级的元素左对齐即可
    • 数组和集合使用 “- ”表示数组每个元素。减号与数据间空格分隔
    • #’表示注释,从这个字符一直到行尾,都会被解析器忽略。 
employee :
     empId : 1
     empName : zhangsan
     empSalary : 200.0
     address :
        - 长沙市
        - 常德市
        - 岳阳市

 

 3.3 获取配置文件中值

1. 使用 @value 注解的方式 只能获取简单值
2. 使用 @ConfigurationProperties
  • 使用@value注解的方式 
@RestController
public class HelloController {

    @Value("${employee.empId}")
    private Integer empId;
    @Value("${employee.empName}")
    private String empName;
    @Value("${employee.empSalary}")
    private Double empSalary;
    @Value("${employee.address[0]}")
    private String address;

    @RequestMapping("/hello")
    public String hello(String name){
        System.out.println(empId+"..."+empName+"..."+empSalary+"..."+address);
        return "hello"+name;
  •  使用@ConfigurationProperties

通过注解 @ConfigurationProperties(prefix='' 配置文件中的
key 的前缀 ") 可以将配置文件中的配置自动与实体进行映射。
使用 @ConfigurationProperties 方式必须提供 Setter 方法,使
@Value 注解不需要 Setter 方法。

 

package com.cjx.pojo;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
@ConfigurationProperties(prefix = "employee")
public class Employee {
    private Integer empId;
    private String empName;
    private Double empSalary;
    private String[] address;

    public void setEmpId(Integer empId) {
        this.empId = empId;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public void setEmpSalary(Double empSalary) {
        this.empSalary = empSalary;
    }

    public void setAddress(String[] address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                ", empSalary=" + empSalary +
                ", address=" + Arrays.toString(address) +
                '}';
    }
}

 

@RestController
public class HelloController {

    @Autowired
    private Employee employee;

    @RequestMapping("/hello")
    public String hello(String name){
        System.out.println(employee);
        System.out.println("name"+"~"+name);
        return "hello"+name;
    }
}
自定义对象封装数据解决警告

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configurationprocessor</artifactId>
<optional>true</optional>
</dependency>