yml/yaml: server:
port: 8080
properties::
server.port=8080
配置文件可以修改spring boot 项目的默认配置
yml 的属性和值都是大小写敏感的
---值的写法
1 字面量:普通的值(数字,字符串,布尔)
k:v : 字面直接来写:
字符串默认不用加上单引号或者双引号
值为数组的写法:
使用注解 @ConfigurationProperties 告诉SpringBoot 将本类中的所有属性和配置文件中相关的配置进行绑定
解决:导入依赖:
将这个类(组件)加入到容器中,使用@Component
@ConfigurationProperties 的功能是由容器提供的,所以必须加上@Component
@ConfigurationProperties是获取配置文件的值,prefix是获取前缀;@Component是将类加入到容器中
注意:yml中 last-name 等价于 lastName
properties 中进行配置:
person.last-name=张三
person.age=18
person.birth=2017/12/15
person.boss=false
#idea properties默认使用的是 utf-8的编码
settings---Encoding 有下面将properties 文件运行时候转换成 ascii勾选上
@ConfigurationProperties 和@Value的区别
以前的时候需要借助bean文件进行配置,为哪个组件(类)创建bean
<bean class="Person">
<property name="lastName" value="?"></property>
</bean> Person是组件(类的名称)
其中name=“lastName” 是属性 value=""是属性的值
bean标签跟@ConfigurationProperties一样的作用都是把Person这个组件(类)加入到容器中
其中value支持的值的写法 :字面量(字符串,数字,Boolean值等类型);
value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL 也就是spring boot的表达式}"
@Value跟之前的bean配置文件是一样的作用,用法也是一样的,如下
@Value("${}/#{1*2}/字面量")
@ConfigurationProperties @Value 以及 bean配置文件的作用都是一样的
@ConfigurationProperties @Value的区别:
语法松散绑定:(last-name lastName)@Value不支持
数据校验:@Validated 表示类中的写入配置文件的属性需要校验;;Configuration支持校验,@Value不支持校验
@Email (表示属性lastEmail 必须是邮箱格式)
private String lastEmail
配置文件yml或者properties 都能获取值
复杂类型封装:向对象,map等类型 需要使用@ConfigurationProperties ,@Value不支持
如果批量获取的话使用@ConfigurationProperties
数据校验的代码:
@ConfigurationProperties 默认从全局配置文件中获取值,
多个配置文件的情况; 我们需要使用 @PropertySource()指定配置文件的加载路径
@PropertySource(value{"classpath:person.propeities"}) 在需要在配置文件中读取属性值的类前面,指定配置文件
@ImportResource: 导入spring boot的配置文件。
我们自己编写的配置文件(可以编写beans.xml等bean配置文件)生效,需要使用@ImportResource
在启动类上导入@ImportResource(location = {"classpath:beans.xml"}) beans.xml指的是要加载的配置文件
配置文件:
这里id默认用的是 类名
测试文件:
@Autowired
ApplicationContext ioc; 意思是将这个容器注入到测试单元中,
判断容器中是不是有这个配置文件,我们直接把这给ioc容器注入到测试单元中,
SpringBoot 推荐的给容器添加组件的方式是:推荐使用全注解的方式(以前写bean标签的bean配置文件):
编写一个配置文件夹,专门放置配置文件
MyAppConfig.java
测试文件:
@Autowired
ApplicationContext ioc; 意思是将这个容器注入到测试单元中,
判断容器中是不是有这个配置文件,我们直接把这给ioc容器注入到测试单元中,
配置文件的占位符
Profile:
根据不同环境提供各不同配置的功能的支持,可以通过激活、指定参数等方式快速切换环境
1 多profile文件形式
再编写配置文件的时候,可以加上properties的标识 eg;application.peoperties application-dev.properties application-prod.properties
默认使用的application.properties 的配置
激活某个环境的配置文件:
1 在application.properties的配置文件中 写下如下配置,那么application-dev.properties 的环境的配置就被激活了
spring.profiles.active=dev
2 命令行方式:--spring.profiles.active=dev
yml的配置文件
application.yml的配置文件可以在一个文件中配置多个环境
1 配置命令参数传入
在测试的时候可以不用打包,我们选择这种方式,传入参数
2 可以选择打包,打包完成之后在 target下面有我们打的jar包 包的名称是项目名称-0.0.1-SNAPSHOT.jar
cmd下面:
java -jar xxx.jar --spring.profiles.active=dev
3 虚拟机参数
-Dspring.profiles.active=dev
配置文件的加载位置:
eg:当前项目叫springTest
1 当前文件下的config文件夹下的配置文件 springTest/config/application.properties
2 当前文件下的根目录 springTest/application.properties
3 类路径下的config文件夹下的配置文件内 springTest/java/main/Resource/config/application.properties
4 类路径(Resources)下的配置文件 springTest/java/main/Resource/application.properties
优先级1-2-3-4越来越低 只有高优先级的配置才会生效
互补配置;没有配置的用有配置的文件
还可以通过spring.config.location改变配置文件的配置的位置
eg:在D盘下新建一个配置文件:然后在我们当前的配置文件中写入配置:
spring.config.location=D:/applicaiotn.properties
项目打包好了,我们可以使用命令行参数的形式。启动项目的时候来指定配置啥文件的新位置指定配置文件和默认加载的这些配置文件共同起作用