springBoot使用全局的配置文件,配置文件名是固定的
application.yaml
application.yml
application.properties
使用配置文件修改springBoot的默认配置
yaml以数据为中心,比JSON,XML更适合作为配置文件
1、yaml配置文件
yaml与xml的对比,如果需要配置服务端口号,yaml和xml的写法如下
xml
<server>
<port>8080</port>
</server>
yaml
server:
port: 8090
1.1、基本语法
k:空格v 表示一对键值对
以空格的缩进来表示层级关系,只要是左对齐的一列数据都是一个层级的
1.2、值的写法
字面量:普通的值(字符串,数字,布尔值)
k: v直接写值,字符串默认不用加上单引号和双引号
双引号,不会转义字符串里的特殊字符;特殊字符会作为本身想表达的意思
单引号,会转义特殊字符
对象
对象有两种写法,如表示一个user对象,里面有name和password两个属性
k-v的写法
user:
name: hw
password: 123
行内写法
user: {name: hw,password: 123}
数组(List,Set)
k: v的写法
pets:
- dog
- cat
- pig
行类写法
pets: [dog,cat,pig]
1.3、配置文件值的注入
配置文件
person:
age: 12
boss: false
dog:
name: 小狗
age: 12
last-name: hw
brith: 2018/8/3
lists:
- 123
- 234
- 345
maps: {k1: v1,k2: v2}
pom文件
<!--导入配置文件处理器,会有自动提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
JavaBean
/**
* 将配置配置文件中配置的每一个属性的值,映射到组件中
* @ConfigurationProperties:告诉springBoot将本类的所有属性和配置文件中相关配置进行绑定
* prefix指定哪个下面的所有属性进行一一映射
*
* 只有这个租件在容器中,才能提供ConfigurationProperties功能
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date brith;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
//get,set省略
}
springBoot还支持@value
使用spring的注解来注入值
/**
* 将配置配置文件中配置的每一个属性的值,映射到组件中
* @ConfigurationProperties:告诉springBoot将本类的所有属性和配置文件中相关配置进行绑定
* prefix指定哪个下面的所有属性进行一一映射
*
* 只有这个租件在容器中,才能提供ConfigurationProperties功能
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date brith;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
//get,set省略
}
其它注入的方式
除了 @ConfigurationProperties
可以注入值之外,还可以通过@value
注入配置文件中的值,如下
/**
* 相当于spring中的配置
* <bean class="person">
* <property name="lastName" value="字面量/${key}从环境变量、配置文件中取值/#{spEl}"></property>
* <bean/>
*/
@Value("${person.lastName}")
private String lastName;
@Value("#{12*11}")
private Integer age;
@ConfigurationProperties
和@value
的对比
对比 |
|
|
功能 | 批量注入配置文件中的属性 | 一个个的指定属性值 |
松散语法绑定 | 支持 | 不支持 |
spEl | 不支持 | 支持 |
JSR303 | 支持 | 不支持 |
复杂类型的封装 | 支持 | 不支持 |
@PropertySource
与@ImportSource
@ConfigurationProperties
默认是选择springBoot的配置文件来注入值,我们可以通过@PropertySource
来使用我们自定义的配置文件注入值
比如我们在person类上添加注解来指定自定义的配置文件
@Component
@PropertySource({"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person
@ImportSource
导入spring的配置文件,让配置文件的内容生效,该注解作用在配置类中
@ImportResource("classpath:beans.xml")
@SpringBootApplication
public class LearnspringbootApplication
springBoot推荐全注解的方式来配置,配置方式如下
/**
*@Configuration:指明当前类是配置类,用来替代之前的spring配置文件
* 相当于在配置文件中用 <bean></bean>添加组件
*/
@Configuration
public class MyAppConfig {
//@Bean将方法的返回值添加到容器中;容器默认的Id是方法名
@Bean
public UserServer userServer(){
return new UserServer();
}
}
1.4、配置文件的占位符
随机数
${random.int},${random.int(10)},${random.value}
${random.long},${random.int[1,100]}
占位符取之前配置文件的值,如果没有,可以使用:指定默认值
1.5、profile多环境切换
profile是springBoot对不同环境提供不同配置功能的支持,可以通过指定参数来快速切换环境
多profile文件
我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml,默认使用application.properties/yml作为配置文件
在配置文件中添加激活配置文件的配置
spring:
profiles:
active: dev
yaml多文档支持多环境
在yaml的配置文件中使用---
来分割文档,那么yaml文件就可以使用如下配置来切换环境
server:
port: 8080
spring:
profiles:
active: dev
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: prod
激活指定的配置文件
①可以在配置文件中spring.profiles.active来指定激活的配置文件
②通过命令行的方式来指定激活哪个配置文件 --spring.profiles.active=dev
③通过虚拟机参数 -Dspring.profiles.active=dev