一、配置文件的位置
-
i.项目内部的配置文件:
properties和yml中的配置,相互补充;如果冲突,则properties优先级高于yml。
spring boot默认能够读取的application.properties/application.yml,这2个文件 可以存在于以下4个地方:
优先级1:外部优先级最高(前提是有被引用)
优先级2:file:项目根目录/config application.properties
优先级3:file:项目根目录 application.properties
优先级4:classpath:项目根目录/config application.properties
优先级5:classpath:项目根目录 application.properties
注意:
a.如果某项配置冲突,则优先级从上往下递减(优先级1>优先级2>优先级3>优先级4>优先级5)
b.如果不冲突,则互补结合使用
配置项目名:
properties文件中
server.servlet.context-path=/boot
-
ii.项目外部的配置文件: (补救)
1.在项目Run configuration ,argumenets(编译工具启动时):
--spring.config.location=D:/application.properties
注:如果同一个配置同时存在于内部配置文件和外部配置文件,则外部文件覆盖内部文件(外部>内部)
外部配置文件
2.打jar包环境调用外部配置文件:
java -jar 项目.jar --spring.config.location=D:/application.properties
-
iii.项目运行参数: (补救)
在项目Run configuration ,argumenets:
--server.port=8883
通过命令行 调用外部配置文件
java -jar 项目.jar --server.port=8883
多个地方配置时,如果冲突,优先级:
命令参数(调用外部的配置文件 > 运行参数 )>内部文件 (properties>yaml)
官网对多配置时的顺序说明:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#boot-features-external-config
二、application.properties与application.yml区别
| @ConfigurationProperties | @Value | 备注 |
优先级 | 高 | 低 | 同时存在的情况properties优先级高于yml |
注值 | 批量注入 | 单个 |
|
松散语法 | 支持 | 不支持 |
|
SpEL | 不支持 | 支持 | SpEL格式@Value("${student.uname}") |
JSR303数据校验 | 支持 | 不支持 | @Validated//开启JSR303数据校验的注解 @Email //被验证的数据格式注解 |
注入复杂类型 | 支持 | 不支持 |
|
三、默认全局配置文件:
application.properties : k=v,或行内写法(k: v,[Set/List/数组] {map,对象类型的属性},并且 []可省,{}不能省)
application.yml : yaml ain't myarkup language ,不是一个标记文档
注意:1. k:空格v
2.通过垂直对齐 指定层次关系
3.默认可以不写引号; ""会将其中的转义符进行转义,其他不会
server:
port: 8882
四、spring boot全局配置文件中的 占位符表达式
a.随机数 ${random.uuid}等
b.引用变量值
实际引用的是
properties中:
student.user.name=zl67
yml中:
student:
name: ${student.user.name2:无名} 如果没有值则默认为无名
student.name?zl67:无名
类名是Student的时候尽量不要使用student作为yml中的名称(别名冲突)
yml文件配置
server:
port: 8882
spring:
profiles: test
student:
age: ${student.age1}
package com.example.demo.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
@Value("李四")
private String name;
@Value("${student.age1}")
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}