码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【笑小枫的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
    
    • 1
    • 2
    • 3

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

    spring:
      profiles:
        include: xxf
    
    • 1
    • 2
    • 3

    因为功能单一,且相互依赖,最后统一写测试代码吧

    配置多个环境

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

    我们可以使用spring.profiles.active: *来指定项目启动使用的环境。

    我们来创建两个测试的配置

    application-dev.yml

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

    application-prod.yml

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

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

    spring:
      profiles:
        active: dev
    
    • 1
    • 2
    • 3

    因为功能单一,且相互依赖,最后统一写测试代码吧

    自定义配置使用

    像上文中,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 https://www.xiaoxiaofeng.com
     */
    @Data
    @Configuration
    @ConfigurationProperties(prefix = "xxf")
    public class XxfProperties {
    
        private String name;
    
        private String site;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    实例测试✌

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

    在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 https://www.xiaoxiaofeng.com
     */
    @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();
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    分为三种场景

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

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

    image-20220817153538206

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

    image-20220817153714594

    • 包含配置的测试用例

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

    image-20220817153802762

    • 用类统一使用配置的测试用例

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

    image-20220817154030857

    更多配置管理工具👀

    如果我们是单一项目,在项目中管理配置还是可以的,但如果我们有十个,一百个项目,,如果我们有专业的运维人员,或者生产的配置想要隔离开,这样我们再在项目中管理配置就不合适了。

    我们项目可以整合一些其他的工具进行配置管理,例如阿里的nocas,携程的apollo等等都是很好的开源的配置管理系统,我们可以直接使用,这里不展开介绍,感兴趣的小伙伴可以阅读下面的文章。

    SpringBoot整合Nacos详细教程

    Apollo微服务配置中心详解

    关于笑小枫💕

    本章到这里结束了,喜欢的朋友关注一下我呦,大伙的支持,就是我坚持写下去的动力。

    微信公众号:笑小枫

    笑小枫个人博客:https://www.xiaoxiaofeng.com

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

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

    本系列其它文章

    本系列的源码已同步在Github:https://github.com/hack-feng/maple-demo

    1. SpringBoot项目创建

    2. SpringBoot配置基于swagger2的knife4j接口文档

    3. SpringBoot集成Mybatis Plus

    4. SpringBoot返回统一结果包装

    5. SpringBoot返回统一异常处理

    6. SpringBoot日志打印Logback详解

    7. SpringBoot控制台自定义banner

    8. SpringBoot集成Redis

    9. SpringBoot用户登录拦截器

    10. SpringBoot处理请求跨域问题

    11. SpringBoot接口日志信息统一记录

    12. SpringBoot导入Excel

    13. SpringBoot导出Excel

    14. SpringBoot发送邮件

    15. SpringBoot根据模板生成Word

    16. SpringBoot生成PDF

    17. SpringBoot文件上传下载

    18. SpringBoot中的Properties配置

  • 相关阅读:
    使用Python中的正则表达式处理html文件
    7、系统管理
    C#面:请解释ASP.NET中的web页面与其隐藏类之间的关系
    AcWing 1289. 序列的第k个数
    Java版本+企业电子招投标系统源代码+支持二开+招投标系统+中小型企业采购供应商招投标平台
    电力系统机组组合优化调度(IEEE14节点、IEEE30节点、IEEE118节点)(Matlab代码实现)
    Java学习day05:排序,选择、冒泡、快速、二分、杨辉三角
    Java面试(基础篇)——解构Java常见的基础面试题 & 结合Java源码分析
    诚信型性格分析,诚信型人格的职业发展
    【从删库到跑路】MySQL数据库 | 存储过程 | 存储函数(使用代码辅助理解)
  • 原文地址:https://blog.csdn.net/qq_34988304/article/details/127977469
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号