配置文件分类
SpringBoot是基于约定的,许多配置都有默认值,可以使用application.properties或者application.yml(application.yaml)进行配置。properties与yaml格式区别:
- properties格式:
server.port = 8080 设置tomcat插件启动时的端口号
- yaml格式:
server:
port: 8080 注意:冒号之后必须要有一个空格
如果在同一个目录中,application.properties,application.yml和application.yaml同时存在,那么优先级为:application.properties > application.yml > application.yaml,优先执行高优先级文件中的相同配置。
YAML
YAML是一种直观的能够被电脑识别的数据序列化格式,容易和脚本语言交互,可以被支持YAML库的不同的编程语言程序导入。YAML文件是以数据为核心的,比传统的xml方式更加简洁。YAML的扩展名可以使用.yml或.yaml。
三种配置文件格式对比:
YAML基本语法
- 大小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数可能不同,导致层次混乱)
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略
YAML数据格式
- 对象(map):键值对的集合
person:
name: zhangsan
# 行内写法:
person: {name: zhangsan}
- 数组:一组按次序排列的值
address:
- beijing
- shanghai
# 行内写法
address: {beijing, shanghai}
- 纯量:单个的、不可再分的值
msg: 'hello \n word' # 单引忽略转义字符
msg: "hello \n word" # 双引识别转义字符
参数引用
name: lisi
person:
name: ${name} # 引用上边定义的name值
获取YAML文件中的数据
- @Value
在类文件中获取YAML定义的属性:
@Value("${name}") # 注意这里的name要和配置文件中定义的属性名称一致
private String name;
或者:
@Value("${person.name}") # 访问person下的name属性
private String name;
数组的注入方式:
@Value("${address[0]}") # 通过角标的形式获取
private String address1;
- Environment
通过对象注入的方式:
@Autowired
private Environment env; // 注意这的Environment是从org.springframework中导入进来的
- @ConfigurationProperties
定义一个配置属性类,添加@ConfigurationProperties注解,该类可以直接读取配置文件中的属性值:
@Component // 表示该类被Spring所识别,是一个Bean
@ConfigurationProperties(perfix = "person")// 添加完该注解之后,该类或自动读取配置文件中对应的属性值
// perfix属性用于控制前缀,表明读取person下的name和age,不然会默认读取person外的name
public class Person {
private String name;
private int age;
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;
}
}
profile
在开发Spring Boot应用时,通常同一套程序会被安装到不同场景,其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,这会非常麻烦。profile功能就是进行动态配置切换的。
- profile的配置方式
- 多profile文件(多配置文件)方式:针对不同的环境,设置一个配置文件,如:application-dev.properties, application-pro.properties, application-test.properties
- yml多文档方式:在yml文件中(applicattion.yml),设置多个配置,每个配置之间用(—)进行分割,如图:
- profile激活方式
-
配置文件:在配置文件(application.properties)中设置,spring.profiles.active = dev # 这里的dev与profile中的后缀保持一致,此时会加载application-dev.properties中的配置内容,对应不同环境时,修改这个值就可以了;针对yaml多文档形式的激活——依然在application.yml中进行激活,如:
-
虚拟机参数:
-
命令行参数:(方式1) 可以通过开发工具进行设置;(方式2) 运行jar包的时候进行指定
方式1:
方式2:
-
内部配置加载顺序
Springboot程序启动时,会从以下位置加载配置文件:
- file:./config/:当前项目下的/config目录下
- file:./ :当前项目的根目录
- classpath:/config/: classpath的/config目录
- classpath:/ :classpath的根目录
加载顺序文以上的排列顺序,高优先级配置的属性会生效。