配置文件分类
springboot是基于约定的,所有有很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。
- properties
server.port=8080
- yml
server:
port: 8080
//空格必须有
properties方式
application.properties在快速启动中会被默认创建在resources文件夹下,
使用maven构建需要自行在resourses文件夹下创建这个文件。(其他地方也可)。文件中除了springboot的内容,我们也可以自行定义一些变量,但不会被springboot识别,可以在之后的项目中提取。
yml方式
文件名必须为application.y(a)ml
配置优先级:properties>yml>yaml
yaml基本语法
YML是一种直观的能够被电脑识别的数据序列化格式,以数据为核心,比传统的xml方式更为简洁。YAML的文件扩展名可以使用.yml和.yaml。
- properties
server.port=8080
server.address=127.0.01
- xml
<server>
<port>8080</port>
<address>127.0.0.1</address>
</server>
- yml
server:
port: 8080
address: 127.0.01
小结
大小写敏感
数值前必须有空格
使用缩进表示层级关系
缩进不允许使用Tab(IDEA可以自动转换为空格)
缩进空格数目不重要,相同层级元素左侧对齐即可
#表示注释,从这个字符一个到行尾
yaml数据格式
- 对象(map):键值对的集合
person:
name: zhangsan
age: 20
#行内写法,注意两处的空格不能省略,没有缩进式用得多
person: {name: zhangsan,age: 20}
- 数组:一组按次序排列的值
address:
- beijing
- shanghai
#行内写法
address: [beijing,shanghai]
- 纯量:单个的,不可再分的值
msg1: 'hello \n world' #单引号忽略转义字符
msg2: "hello \n world" #双引号识别转义字符
YML参数引用
name: lisi
person:
name: ${name}
获取配置文件数据
三种方式读取配置内容
- @Value
@Value("${name}")
private String name1;
@Value("${person.name}")
private String name2;
@Value("${person.age}")
private int age1;
@Value("${address[0]}")
private String address1;
@RequestMapping("/hello")
public String hello(){
System.out.println(name1);
System.out.println(name2);
System.out.println(age1);
System.out.println(address1);
return "test success";
}
注入单值为以上写法,下面是注入对象
- Environment
@Autowired
private Environment env;
@RequestMapping("/hello1")
public String hello1(){
System.out.println(env.getProperty("person.name"));
System.out.println(env.getProperty("address[0]"));
return "test success";
}
想把整个对象注入到我们的属性中,就用到了ConfigurationProperties
- @ConfigurationProperties
步骤
1.创建对应类(insert+alt可以快捷创建getter和setter方法)
2.添加@ConfigurationProperties(prefix = "")注解
@Component
@ConfigurationProperties //在当前版本中,如果不添加(prefix="person"),则不能识别person的属性,如果添加,就不能识别其他变量的属性
public class Person {
private String name;
private String age;
private int num;
private String[] address;
...
}
profile
我们在开发Spring Boot应用时,通常同一套程序会被安装到不同的环境,比如:开发,测试,生产等。其中数据库地址,服务端口等等配置都不同,如果每次打包时,都需要修改配置文件,那么会非常麻烦。profile功能就是来进行动态的配置切换的。
1.profile配置方式
···多profile文件方式:配置多个properties文件,如application-dev.properties,在主文件application.properties使用spring.profiles.active=pro,激活此配置。
···yml多文档方式:只创建一个yml文件,把他们分成不同的部分
#用三个‘-’划分不同部分
#使用spring: profiles:命名文档部分名
#使用spring:active:“xxx”选择激活的配置
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test
---
server:
port: 8083
spring:
profiles:pro
---
spring:
profiles:
active: pro
2.profile激活方式
···配置文件:如上
···虚拟机参数:在idea的设置中修改虚拟机的参数,在VM options中指定:
-Dspring.profiles.active=dev
···命令行函数:java -jar xxx.jar --spring.profiles.active=dev
项目内部配置文件加载顺序
内部配置加载顺序:
1.file:./config/:当前项目下的/config目录下(如没有自己创建config文件夹)
2.file:./ :当前项目的根目录
3.classpath:/config/: classpath的/config目录下
4.classpath:/ :classpath的根目录下(我们配置的yml,properties文件都在这里)
优先级由高到低,都是用的application.properties/y(a)ml进行配置
maven打包时前两个配置文件不会被打入jar包
项目外部配置文件加载顺序
可以不在项目中进行配置,可以选择一个项目外的配置文件.在命令行使用–spring.config.location=“xxx”,或者让配置文件与jar文件同级,即可读取。
外部配置用处:在不修改项目的情况下,修改配置