SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用 application.properties或者application.yml(application.yaml)进行配置。
SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件。
这三种文件存在优先级关系:.properties > .yaml > .yml (即 对同一种属性进行赋值时,springboot会优先加载.properties中的,等同于.properties文件中的值会覆盖前两者中的值)
我们可以在配置文件中自己定义服务器端口号和web应用的虚拟工程名,如:
在yml配置文件中的写法为:
springboot工程启动后,在控制台上我们可以看到如下日志,说明配置生效了:
application.yml配置文件
1. yml配置文件简介
YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数 据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导 入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简 洁。
YML文件的扩展名可以使用.yml或者.yaml。
2.yml配置文件的语法
配置普通数据
语法:
key: value
示例代码:
#普通数据的配置
name: zhangsan
注意:冒号之后有一个空格
配置对象数据
语法:
key:
key1: value1
key2: value2
或者:
key: {key1: value1,key2: value2}
示例代码:
所有冒号后都要有一个空格
#对象数据的配置,一般使用缩进方式表示层级关系
person:
name: zhangsan
age: 18
addr: beijing
#行内对象配置,上面对象的另一种写法,一般很少用
#person: {name: zhangsan,age: 18,addr: beijing}
注意:key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别
配置Map数据
同上面的对象写法
配置数组(List、Set)数据
语法:
key:
- value1
- value2
或者:
key: [value1,value2]
示例代码:
city:
- beijing
- tianjin
- shanghai
- chongqing
#或者
city: [beijing,tianjin,shanghai,chongqing]
#集合中的元素是对象形式
student:
- name: zhangsan
age: 18
score: 100
- name: lisi
age: 28
score: 88
- name: wangwu
age: 38
score: 90
注意:value1与之间的 - 之间存在一个空格
配置文件与配置类的属性映射方式
1.使用注解@Value映
我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上
例如:
application.properties配置如下:
person:
name: zhangsan
age: 18
addr: beijing
注:第一个冒号前不用空格,之后的无所谓
或者,application.yml配置如下:
person:
name: zhangsan
age: 18
addr: beijing
注:每个冒号后都要加空格
实体Bean代码如下:
@RestController public class Quick2Controller { @Value("${person.name}") //从配置文件中获取对应的key的value值,自动赋给下面变量 private String name; @Value("${person.age}") private String age; @Value("${person.addr}") private String addr; @RequestMapping("/quick2") public String quick2() { //获取配置文件的信息 return "name: " + name + " age: "+age +" addr: " + addr; } }
这里的@Value()也可以直接添值,如@Value("beijing")
浏览器访问结果为:
2.使用注解@ConfigurationProperties映射
通过注解@ConfigurationProperties(prefix="配置文件中的key的前缀")可以将配置文件中的配置自动与实体进行映射
application.properties配置如下:
person.name=zhangsan
person.age=18
person.addr=beijing
注:只能写成这种形式,而不能key:value
或者,application.yml配置如下:
person:
name: zhangsan
age: 18
addr: beijing
实体Bean代码如下:
@RestController @ConfigurationProperties(prefix = "person") public class Quick3Controller { private String name; private Integer age; private String addr;
//需要设定setter和getter方法 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; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } @RequestMapping("/quick3") public String quick2() { //获取配置文件的信息 return "name: " + name + " age: " + age + " addr: " + addr; } }
浏览器结果:
注意:使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方 法才可以,而使用@Value注解修饰的字段不需要提供set方法