SpringBoot的自动配置方式让配置文件使用起来更加方便,直接配置默认属性就可以完成对其他模块的集成。
默认配置文件
Spring Boot默认支持两种配置文件,即bootstrap(.yml或.properties格式)文件和application(.yml或.properties格式)文件。
从加载顺序来看,bootstrap文件是优先于application文件的。
bootstrap文件是父应用程序上下文加载,用于程序启动的引导工作,并且bootstrap文件可以从额外的资源来加载配置信息。从应用场景来看,bootstrap文件可以配置一些系统级别的属性,这些属性的特征基本不会变,而application文件可以通过环境的不同分成多个文件。这两个文件共用一个环境,为Spring Boot应用程序提供配置属性。
可以看到,Spring Boot的配置文件有.yml与.properties两种扩展名称。YAML格式的文件可以更方便地定义层次配置数据,数据结构层次清晰明了,配置简单易读。本节的示例将会采用YAML格式的文件来配置数据。
多环境配置
在进行应用开发时,环境会分为开发环境(dev)、测试环境(test)和线上环境(prod),对应的会有多个配置文件,如application-dev.yml、application-test.yml和applicationprod.yml。Spring Boot采用spring.profiles.active属性变量来指定具体的配置文件,如spring.profiles.active=test,应用启动加载的文件是application-test.yml。
同样,也可以在一个application.yml文件中通过spring.profiles属性配置不同环境的属性值。示例代码如下:
server:
address: 192.168.1.100
---
spring:
profiles: dev
server:
address: 127.0.0.1
---
spring:
profiles: prod
server:
address: 192.168.1.120
上面的这个例子中,如果dev配置被指定,则server.address的属性值为127.0.0.1。同样,如果prod配置被指定,则server.address的属性值为192.168.1.120。如果dev和prod配置都没有被指定,则server.address的属性值为192.168.1.100。
配置注解
Spring Boot提供了@ConfigurationProperties和@Value等注解,可以轻松地获取配置文件的属性值。具体示例代码如下:
my:
servers:
-dev.example.com
-another.example.com
name: zhangsan
上面是一个YAML格式的配置文件,可以通过@ConfigurationProperties注解获取配置的属性值。示例代码如下:
@Data
@Component
@ConfigurationProperties(prefix="my")
public class ConfigProperties {
//值:dev.example.com 、another.example.com
private List<String> servers = new ArrayList<String>();
private String name;
//值:zhangsan
}
通过@
EnableConfigurationProperties注解可以引入ConfigProperties类。示例代码如下:
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(ConfigProperties.class)
public class MyConfiguration {
}
通过@Validated注解可以对配置文件中的属性值进行校验。示例代码如下:
@ConfigurationProperties(prefix="my")
@Validated
public class ConfigProperties {
private List<String> servers = new ArrayList<String>();
@NotNull
//不为空
private String name;
}
通过@Value("${property}")注解方式可以直接获取单个属性值。
示例代码如下:
@component
public class ConfigService {
@Value("${my.nam}") //zhangsan
private String name;
}
Spring Boot使用@Configuration注解完成自动配置,同时也提供了很多@Conditional注解,指定在哪些条件下才能自动加载配置,如果不满足条件,则不加载。@Conditional注解的类型如表3.2所示。