目录
springBoot支持的配置文件有以下几种,其中yml和yaml实际上是同一种类型的不同后缀
- properties
- yml
- yaml
分别用这三种配置文件对端口号进行配置
properties:
server.port=8081
yml与yaml(数据前面必须要有一个空格)
server:
port: 8081
在同一级目录下优先级为:properties > yml > yaml
2、yaml的数据格式
yaml存储数组]
(注意 数据与 - 之间有空格
address:
- hainan
- hunan
#行内写法
address: [hainan,hunan]
yaml存储纯量
msg: 'hellow \n word' #单引号会忽略转义字符,原样输出
msg2: "hello \n word" #双引号会识别转义字符,转义后输出
3、java代码获取yaml中数据的方式
数据准备:
name: zangsan
age: 19
person:
age: 18
address:
- hainan
- hunan
msg: 'hellow \n word' #单引号会忽略转义字符,原样输出
msg2: "hello \n word" #双引号会识别转义字符,转义后输出
方式一:@Value注入
@Value("${name}")//直接获取纯量
private String name ;
@Value("${person.age}")//获取键值对中的数据
private Integer age;
@Value("${address[1]}")//获取数组中的数据
private String address1 ;
方式二:通过Environment获取(import org.springframework.core.env.Environment;)
@Controller
public class c {
@Autowired
private Environment environment;
@ResponseBody
@RequestMapping("/aaa")
public String ff(){
String name = environment.getProperty("name");
System.out.println(name);
String age = environment.getProperty("person.age");
System.out.println(age);
String address = environment.getProperty("address[1]");
System.out.println(address);
return "hehhehih";
}
}
方式三:通过@ConfigurationProperties
该方法需要配合实体类使用,例如yaml中有name和age两个key,然后有实体类person与之对应,这时候要在实体类上标记@ConfigurationProperties注解,并且加入ioc容器中。后面通过注入的方式获取值
@Component//标记为bean加入IOC容器
@ConfigurationProperties//读取配置文件
public class Person {
private String name ;
private Integer age;
public String getName() {return name; }
public void setName(String name) {this.name = name; }
public Integer getAge() { return age;}
public void setAge(Integer age) {this.age = age;}
}
@Controller
public class c {
@Autowired
private Person person;
@ResponseBody
@RequestMapping("/aaa")
public String ff(){
System.out.println(person.getName());
System.out.println(person.getAge());
return "hehhehih";
}
}
特别说明:@ConfigurationProperties可以标明前缀,例如如果加上前缀person,那么就可以获取yaml中person的name和age,否则不能
@ConfigurationProperties(prefix = "person")//读取配置文件
4、profile使用
在生产、开发、测试中可能会用到不同的配置环境,这时候可以通过profile来从多套配置中选择一项生效。配置文件以‘application-’开头,然后根据实际情况去后缀,例如开发环境可以取为application-dev,生产环境可以取为:application-pro,测试环境可以取为:application-text
多文件配置(多套配置在不同文件中)
创建三个文件application-dev、application-pro、application-text,分别配置端口为8081、8082、8083
通过主配置文件选择哪一个配置文件生效,在application.properties中通过spring.profiles.active设置生效的配置文件,要生效的配置文件只需要写‘application-’后面的后缀即可,因为前面是默认的。
单文件配置(多套配置写在一个文件中)
使用yaml文件可以通过 ‘---’将位置文件进行分页,每一页代表一套配置,在下面的代码中将配置文件分成了4份,然后通过spring:profiles给每一份配置取名,方便后面通过spring:profiles:active选择生效的配置
5、 激活profile的方式
配置文件启动:
yaml
properties
命令行的方式:
cmd指令启动
idea命令行启动
虚拟机启动
6、springboot配置文件的加载顺序
当同时出现application.properties、application.yml、application.yaml三种配置文件,并且内容冲突的时候,最终起作用的是properties然后到yml再到yaml
内部配置文件加载:spring启动的时候会从以下位置加载配置文件:
- 项目根目录:./config/
- 项目根目录:./
- classpath:/config
- classpath:/
加载的优先级顺序是从上向下加载,并且所有的文件都会被加载,高优先级的内容会覆盖底优先级的内容,形成互补配置。
但是如果打包项目的时候,根目录的配置并不会被打包进去
外部配置文件加载:
外部配置文件总是会比内部的配置文件优先级更高
外部配置调用方式:java -jar ‘jar包路径’ --spring.config.location='配置文件路径' 例如:
C:\Users\10152>java -jar D:\springboot02\springboot-actuator\target\springboot-actuator-
0.0.1-SNAPSHOT.jar --spring.config.location=D:\springboot02\springboot-
actuator\target\application.yml