Spring Boot 2.x快速上手(五)Spring Boot框架环境切换与自定义配置
目录
一、简单认识YAML
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用
application.properties或者application.yml(application.yaml)进行配置。SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件。其中,application.properties文件是键值对类型的文件,之前一直在使用,所以此处不在对properties文件的格式进行描述。除了properties文件外,SpringBoot还可以使用yml文件进行配置,下面对yml文件进行讲解。
YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
二、YAML语法格式
- 标准格式:key:(空格)value
- 使用空格代表层级关系,以“:”结束
我们以之前学习过的application.properties文件为例进行修改该文件:
#设置运行时为debug模式
#debug=false
debug: false
#修改tomcat的默认端口为8080
#server.port=8080
#server.servlet.cotext-path=/myspringboot
server:
port: 8080
servlet:
context-path: /
#idea对yml有良好支持,可自动生成
#spring.http.encoding.charset=UTF-8
#spring.mvc.date-format=yyyy-MM-dd
spring:
http:
encoding:
charset: UTF-8
mvc:
date-format: yyyy-MM-dd
三、环境配置文件
- 在实际的项目的过程中,有些配置文件在开发、测试或者生产等不同的环境中可能是不同的,比如说数据库连接等。
- Spring给我们提供了profiles机制,Spring Boot针对不同的环境提供了不同的Profiles文件。
- Profiles文件的默认命名格式为application-{env}.yml
- 使用spring.profiles.actives选项来指定不同的profiles
例如:
application-dev.properties — 这是开发环境
application-prod.properties — 这是生产环境
当我们同时创建了application.properties、application-dev.properties、application-prod.properties三个文件,
例如:修改三个文件中server.port的配置,即端口号的配置,经过测试,application-dev.properties中的配置覆盖了application.propertie中的配置。所以呢,我们在配置文件中可以将于环境无关的配置属性放到application.properties文件中,然后根据环境的变化,将不同的属性配置放到相应配置文件中去。
四、自定义配置
Spring Boot内置的配置项远远不能支持我们的程序运行,在项目设计的时候,往往因为扩展性的需要,项目需要预留很多的自定义配置,Spring Boot允许我们配置自定义选项。
在SpringBoot中,有两仲方式使用自定义选项:
- @Value单个属性注入
- @ConfigurationProperties类型安全加载
新建一个自定义的properties文件config.properties文件,进行编写自定义的属性。在编写自定义属性之前,我们先需要修改一下idea的设置,因为properties文件对中文的可读性性是非常不好的,打开设置进行如下的勾选;
举例:
1、@Value单个属性的注入:
在MyController类中进行如下编写:
@Value("${app.name}")
private String name;
@Value("${app.page-size}")
private Integer pageSize;
2、@ConfigurationProperties类型安全加载
编写一个AppConfig类:
@Component//这是一个组件类,写上这个注解,启动时会自动加载
//将所有app前缀的属性自动赋值给对应的bean属性
@ConfigurationProperties(prefix="app")
public class AppConfig {
private String name ;
private String description;
private String version;
private Integer pageSize;
private Boolean showAdvert;
private String website;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Boolean getShowAdvert() {
return showAdvert;
}
public void setShowAdvert(Boolean showAdvert) {
this.showAdvert = showAdvert;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
在MyController类中进行如下编写:
//动态注入IOC容器中匹配的bean
@Autowired
private AppConfig appConfig;
启动入口类即可获取到config.properties文件中所写到的所有属性。