1、配置文件分类
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。
-
默认配置文件名称:application
-
在同一级目录下优先级为:properties > yaml > yml
例如:配置内置Tomcat的端口
properties:
server.port=8080
yml:
server: port: 8080
2、yaml基本语法
-
大小写敏感
-
数据值前边必须有空格,作为分隔符
-
使用缩进表示层级关系
-
缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。
-
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
-
''#" 表示注释,从这个字符一直到行尾,都会被解析器忽略。
server:
port: 8080
address: 127.0.0.1
name: abc
3、yaml数据格式
对象(map):键值对的集合。
person:
name: zhangsan
# 行内写法
person: {name: zhangsan}
数组:一组按次序排列的值
address:
- beijing
- shanghai
# 行内写法
address: [beijing,shanghai]
纯量:单个的、不可再分的值
msg1: 'hello \n world' # 单引忽略转义字符
msg2: "hello \n world" # 双引识别转义字符
参数引用
name: lisi
person:
name: ${name} # 引用上边定义的name值
4、获取数据_1
@Value
@Value注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中,Spring Boot框架从Spring框架中对@Value注解进行了默认继承,所以在Spring Boot框架中还可以使用该注解读取和注入配置文件属性值。使用@Value注入属性的示例代码如下
#获取普通配置
@Value("${name}")
private String name;
#获取对象属性
@Value("${person.name}")
private String name2;
#获取数组
@Value("${address[0]}")
private String address1;
#获取纯量
@Value("${msg1}")
private String msg1;
@Value不仅可以将配置文件的属性注入Person的name属性,还可以直接给name属性赋值,这点是ConfigurationProperties不支持的。注意:@Value注解对于包含Map集合、对象以及YAML文件格式的行内式写法的配置文件的属性注入都不支持,如果赋值会出现错误。
Evironment
@Autowired
private Environment env;
System.out.println(env.getProperty("person.name"));
System.out.println(env.getProperty("address[0]"));
5、获取数据_2
@ConfigurationProperties(prefix = "person")注解的作用是将配置文件中以person开头的属性值通过setXX()方法注入到实体类对应属性中
@Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放到Spring容器中,只有这样才能被@ConfigurationProperties注解进行赋值
注意:prefix一定要写
@Component
@ConfigurationProperties(prefix = "person") // 注解的作用是将配置文件中以person开头的属性值通过setXX()方法注入到实体类对应属性中
public class Person {
private String name;
private int age;
private String[] address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
打开项目的resources目录下的application.properties配置文件,在该配置文件中编写需要对Person类设置的配置属性
编写application.properties配置文件时,由于要配置的Person对象属性是我们自定义的,Spring
Boot无法自动识别,所以不会有任何书写提示。在实际开发中,为了出现代码提示的效果来方便配置,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可以在pom.xml文件中添加一个Spring Boot提供的配置处理器依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
在pom.xml中添加上述配置依赖后,还需要重新运行项目启动类或者使用“Ctrl+F9”快捷键(即Build Project)重构当前Spring Boot项目方可生效
6、profile
-
profile是用来完成不同环境下,配置动态切换功能的。
-
profile配置方式
多profile文件方式:提供多个配置文件,每个代表一种环境。
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
yml多文档方式:
在yml中使用 --- 分隔不同配置
-
profile激活方式
-
配置文件: 再配置文件中配置:spring.profiles.active=dev
-
虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev
-
命令行参数:java –jar xxx.jar --spring.profiles.active=dev
7、项目内部配置文件加载顺序
加载顺序为上文的排列顺序,高优先级配置的属性会生效
-
file:./config/:当前项目下的/config目录下
-
file:./ :当前项目的根目录
-
classpath:/config/:classpath的/config目录
-
classpath:/ :classpath的根目录
8、项目外部配置加载顺序
外部配置文件的使用是为了对能不文件的配合
1.命令行
java -jar app.jar --name="Spring“ --server.port=9000
2.指定配置文件位置
java -jar myproject.jar --spring.config.location=e://application.properties
3.外部不带profile的properties文件
classpath:/config/application.properties
classpath:/application.properties