springboot中的配置文件
springboot 使用一个全局的配置文件,且名称固定
- application.yml
- application.properties
配置文件的作用:修改 springboot 的默认配置
yml 语法
1.基本语法
k:(空格)v ,空格必须有
以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级
server:
port: 8080
servlet:
context-path: /text
属性和值也是大小写敏感的
2.值的写法
k: v(数字、字符串、布尔值)
字符串默认不需要加上单引号或者双引号
“”:双引号:不会转义字符串中的特殊字符:特殊字符会作为本身要表达的意思显示出来
‘’:单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串
# yml中的数据
t1:
k1: 正常字符串 \n ֱ正常字符串
k2: "双引号字符串 \n 双引号"
k3: '单引号字符串 \n 单引号'
package com.yml.springbootyml.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @Author: chenshuo
* @Date: 2020/3/18 13:47
*/
@Component
public class TestYml {
@Value("${t1.k1}")
String k1;
@Value("${t1.k2}")
String k2;
@Value("${t1.k3}")
String k3;
//省略setter getter方法
@Override
public String toString() {
return "TestYml{" +
"k1='" + k1 + '\'' +
", k2='" + k2 + '\'' +
", k3='" + k3 + '\'' +
'}';
}
}
注意:
1.@Value必须在注册类中使用,且类加载方式必须为注入方式
2.@Value不能注释在static或者final的变量
测试类
@SpringBootTest
class SpringBootYmlApplicationTests {
@Autowired
TestYml testYml;
@Test
void contextLoads() {
System.out.println(testYml);
}
}
结果如图(如果出现乱码,setting 中搜索 file encodings,将编码格式改成utf-8)
对象、Map(键值对)
people:
name: zhangsan
age: 18
行内写法:
people: {name: zhangsan,age: 18}
数组(list、set)
用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
配置文件值注入
person:
age: 19
boss: false
birth: 1995/9/29
maps:
k1: v1
k2: v2
lists: [lisi,zhaoliu]
dog:
name: 旺旺
age: ${random.int}
name: zhangsan
person实体类、dog实体类
package com.yml.springbootyml.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @Author: chenshuo
* @Date: 2020/3/18 14:35
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
//getter,setter
}
在测试类中测试的结果
注意:实体类:注解注入的方式添加
Person{name='zhangsan', age=19, boss=false, birth=Fri Sep 29 00:00:00 CST 1995, maps={k1=v1, k2=v2}, lists=[lisi, zhaoliu], dog=Dog{name='旺旺', age=-2115370800}}
配置文件中还支持占位符:占位符获取之前指定的值,如果没有,可以通过:指定默认值
person:
age: 19
boss: false
birth: 1995/9/29
maps:
k1: v1
k2: v2
lists: [lisi,zhaoliu]
dog:
# 使用占位符 ${} ${person.lastName:lisi} 找不到lastName,默认值是lisi
name: ${person.name}_旺旺
age: ${random.int}
name: zhangsan
结果:
Profile
1、多Profile文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
2、yml支持多文档块方式
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
3、激活指定profile
1、在配置文件中指定 spring.profiles.active=dev
2、命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
3、虚拟机参数;
-Dspring.profiles.active=dev