Spring Boot 2.x快速上手(五)Spring Boot框架环境切换与自定义配置

目录

一、简单认识YAML

二、YAML语法格式

三、环境配置文件

四、自定义配置


一、简单认识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文件中所写到的所有属性。

发布了98 篇原创文章 · 获赞 165 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/cyl101816/article/details/99999617