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 : 1empName : zhangsanempSalary : 200.0address :- 长沙市- 常德市- 岳阳市
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>