SpringBoot配置
配置文件分类
SpringBoot是基于约定的,很多配置都是使用默认值,如果想要使用自己的配置替换默认配置,可以使用application.properties
或者application.yml
(application.yaml
)
两种不同的配置方式,另外SpringBoot的配置文件必须是application.properties
或者application.yml
- properties:
server.port=8080
- yml:
注意,port的冒号后面需要有一个空格不然会出现报错的问题
server:
port: 8080
在SpringBoot,如果三种配置文件都存在,那么优先使用application.properties
然后是application.yml
最后application.yaml
。
YAML配置
yaml文件中
# map对象:键值对的集合
server:
port: 8080
name: abc
# 行内写法
person: {name: zhangsan,age: 20}
# 数组:一组按次序排列的值
address:
- beijing
- shanghai
address2: [beijing,shanghai]
#纯量:单个不可分的值
msg1: 'hello \n world' # 单引号会直接输出
msg2: "hello \n world" # 使用双引号会转义字符
获取数据
@RestController
public class HelloController {
// 这边的name和yaml文件里面
@Value("${name}")
private String name;
@Value("${person.name}")
private String personName;
@Value("${person.age}")
private int age;
@Value("${address[0]}")
private String address1;
@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;
// 另一种配置方式,可以通过environment实现参数的获取
@Autowired
private Environment environment;
@Autowired
private Person person;
@RequestMapping("/hello2")
public String hello2(){
System.out.println(name);
System.out.println(personName);
System.out.println(age);
System.out.println(address1);
System.out.println(msg1);
System.out.println(msg2);
System.out.println("---------------");
System.out.println(environment.getProperty("person.name"));
System.out.println("---------------");
System.out.println(person);
return "hello Spring boot 2222";
}
@RequestMapping("/hello")
public String hello(){
return "hello Spring boot";
}
}
Configuration配置方式
package com.example.springbootinit;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
// 注意这里所有的age name包括set get方法都需要和yml文件中的信息一致
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
开发环境配置
使用properties文件区分开发环境
通过在application.properties
文件中写入指定的运行环境的配置文件名称后缀即可进行相应的激活,需要注意的是所有的配置文件都是application-xxx.properties
spring.profiles.active=dev
# 修改项目的访问路径,默认值为:/
server.servlet.context-path=/hello
使用yml文件区分开发环境
# 激活的环境
spring:
profiles:
active: dev
---
# 开发环境
server:
port: 8081
spring:
config:
activate:
on-profile: dev
---
其实也可以通过在DIEA的运行环境参数来选择环境
- VM options中输入
-Dspring.profiles.active=test
- Program arguments输入
--spring.profiles.active=test
Spring配置文件优先级
优先级高的配置文件将会自动覆盖掉低优先级配置文件,我们在resources中的配置路径就是classpath的路径。但是file里面的配置文件不会被打包进jar包。
- file: ./config/:当前项目下的/config目录下(也就是jar包位置)
- file: ./:当前项目的根目录
- classpath:/config/:classpath的/config目录
- classpath:/ classpath的跟目录
如果jar保护和properties文件在同一目录下就会被自动读取和应用