乐趣区

关于后端:笑小枫的SpringBoot系列十八SpringBoot中的Properties配置

本文简介🎨

随着咱们的演示性能越来越多,外面的配置也越来越多,咱们怎么更好的来治理这些配置呢?

理论我的项目中,咱们必定会有开发环境、测试环境、生产环境,咱们又该怎么便捷的配置这些环境呢?

咱们应该怎么自定义本人的一些配置呢?该怎么应用呢?

带着这些问题,咱们一起来探讨一下🧐🧐🧐

性能实现🧐

配置分模块治理

在应用过程中,咱们有很多配置,比方 mysql 配置、redis 配置、mybatis-plus、调用第三方的接口配置等等 …

咱们当初都是放在一个大而全的配置外面的,如果咱们想依据性能分为不同的配置文件治理,让配置更加清晰,应该怎么做呢?

咱们能够应用 spring.profiles.include: *,*,* 来蕴含其余的配置

留神:创立的配置要用 application- 开始,例如 mysql 的,咱们能够配置成 application-mysql 这样。

蕴含多个配置,用英文逗号(“,”)宰割即可

咱们在 resources 目录下创立 application-xxf.yml 文件,代码如下👇

xxf:
  name: 笑小枫 -xxf
  site: https://www.xiaoxiaofeng.com

而后在 application.yml 配置以下代码即可

spring:
  profiles:
    include: xxf

因为性能繁多,且相互依赖,最初对立写测试代码吧

配置多个环境

像 mysql、redis 不同环境的配置必定不一样,不想每次打包公布前都批改一次配置,应该怎么疾速的切换环境呢?

咱们能够应用 spring.profiles.active: * 来指定我的项目启动应用的环境。

咱们来创立两个测试的配置

application-dev.yml

xxf:
  desc: 这是一个开发的环境

application-prod.yml

xxf:
  desc: 这是一个生产的环境

而后在 application.yml 配置中应用 spring.profiles.active: * 来指定环境即可。

spring:
  profiles:
    active: dev

因为性能繁多,且相互依赖,最初对立写测试代码吧

自定义配置应用

像上文中,xxf.name`xxf.desc` 都是咱们自定义的配置,那么咱们在我的项目中如何疾速的应用呢?

最简略的应用注解 @Value("${xxf.name}") 这样就能够了。

如果多个配置可能会常常应用,咱们想对立治理怎么办,能够创立一个类,把它们对立定义在类中,而后在类上应用 @Configuration 注解就能够了。

对于同一组的配置,咱们还能够应用 @ConfigurationProperties(prefix = "xxf") 指定前缀。像上面这样👇

package com.maple.demo.config.bean;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author 笑小枫
 * @date 2022/7/22
 * @see <a href="https://www.xiaoxiaofeng.com">https://www.xiaoxiaofeng.com</a>
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "xxf")
public class XxfProperties {

    private String name;

    private String site;
}

实例测试✌

下面说了那么多,让咱们来测试一下吧。

controller 包下编写测试的类TestConfigController.java

package com.maple.demo.controller;

import com.maple.demo.config.bean.XxfProperties;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 笑小枫
 * @date 2022/7/22
 * @see <a href="https://www.xiaoxiaofeng.com">https://www.xiaoxiaofeng.com</a>
 */
@Slf4j
@RestController
@RequestMapping("/example")
@RequiredArgsConstructor
@Api(tags = "实例演示 -application 文件配置")
public class TestConfigController {

    /**
     * 通用 - 不辨别环境
     */
    @Value("${xxf.name}")
    private String name;
    @Value("${xxf.site}")
    private String site;

    /**
     * 辨别环境
     */
    @Value("${xxf.desc}")
    private String desc;

    /**
     * 同组配置,能够应用类的模式注入
     */
    private final XxfProperties xxfProperties;

    @ApiOperation(value = "不同环境的配置测试用例")
    @GetMapping("/configEnv")
    public String chooseEnv() {return desc;}

    @ApiOperation(value = "蕴含配置的测试用例")
    @GetMapping("/commonEnv")
    public String commonEnv() {return name + site;}

    @ApiOperation(value = "用类对立应用配置的测试用例")
    @GetMapping("/configClass")
    public String configClass() {return xxfProperties.getName();
    }

}

分为三种场景

  • 不同环境的配置测试用例

​ 配置 dev 环境,浏览器拜访http://localhost:6666/example/configEnv

​ 切换成 prod 环境,重启我的项目,浏览器再次拜访http://localhost:6666/example/configEnv

  • 蕴含配置的测试用例

    浏览器拜访http://localhost:6666/example/commonEnv

  • 用类对立应用配置的测试用例

    浏览器拜访http://localhost:6666/example/configClass

更多配置管理工具👀

如果咱们是繁多我的项目,在我的项目中治理配置还是能够的,但如果咱们有十个,一百个我的项目,,如果咱们有业余的运维人员,或者生产的配置想要隔离开,这样咱们再在我的项目中治理配置就不适合了。

咱们我的项目能够整合一些其余的工具进行配置管理,例如阿里的 nocas,携程的apollo 等等都是很好的开源的配置管理系统,咱们能够间接应用,这里不开展介绍,感兴趣的小伙伴能够浏览上面的文章。

对于笑小枫💕

本章到这里完结了,喜爱的敌人关注一下我呦,大伙的反对,就是我保持写下去的能源。

微信公众号:笑小枫

笑小枫集体博客:https://www.xiaoxiaofeng.com

CSDN:https://zhangfz.blog.csdn.net

本文源码:https://github.com/hack-feng/maple-demo

退出移动版