【笑小枫的SpringBoot系列】【十八】SpringBoot中的Properties配置

news2024/11/27 10:24:14

本文简介🎨

随着我们的演示功能越来越多,里面的配置也越来越多,我们怎么更好的来管理这些配置呢?

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

我们应该怎么自定义自己的一些配置呢?该怎么使用呢?

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

功能实现🧐

配置分模块管理

在使用过程中,我们有很多配置,比如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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CANopen之SDO,PDO

一、简述 CAN 总线是一种串行通信协议&#xff0c;具有较高的通信速率的和较强的抗干扰能力&#xff0c;可以作为现场总线应用于电磁噪声较大的场合。由于 CAN 总线本身只定义ISO/OSI 模型中的第一层&#xff08;物理层&#xff09;和第二层&#xff08;数据链路层&#xff09…

nodejs+mysql网上书店图书销售购物商城系统vue

系统功能 此系统的功能分为用户模块和管理员模块&#xff1a; 1、用户后台功能模块包括&#xff1a;首页、个人中心、订单评价管理、我的收藏管理、订单管理模块。 2、前台首页功能模块包括&#xff1a;首页、图书信息、图书资讯、个人中心、后台管理、购物车、在线聊天模块。 …

SAP MDG —— 更好地理解你的数据变更

概念 在SAP MDG on SAP S/4HANA 2021中&#xff0c;SAP发布了一种全新的数据分析框架&#xff1a;变更请求中的主数据变更分析。依赖该框架&#xff0c;你可以为你的最终用户提供强大的数据分析功能&#xff0c;以深度洞悉变更请求中到底变化了哪些数据。 使用这些分析功能&a…

Thinkphp6 分布式事务异常处理 1440 XAER_DUPID: The XID already exists

Mysql分布式事务&#xff0c;前提条件 MySQL中只有当隔离级别设置为Serializable的时候才能使用分布式事务。 执行两个命令确认环境 show variables like innodb_support_xa;show variables like %tx_iso%;异常信息 根据官方分布式示例 public function test(){Db::transa…

input空格回车输入标签

分析 我们自己封装input输入标签需要注意一下几点: 样式实现&#xff0c;span实现标签效果、input隐藏边框(Element-UI可以直接使用tag)。事件监听&#xff0c;确定生成标签的操作&#xff0c;可以是回车,并且需要监听离开焦点的情况。标签限制,最多几个,以及输入验证 html:&…

使用CDC模式改造遗留系统

项目改造背景及挑战 在我们经历的各种遗留系统改造之旅中&#xff0c;使用**绞杀者模式**来改造一个巨大的单体服务&#xff0c;是一种被广泛采用且验证行之有效的手段&#xff0c;在应用传统的绞杀者模式时&#xff0c;通常采用逐步替换的方式&#xff0c;将遗留系统中某一独…

b站pink老师JavaScript的ES6面向对象课程中:正则表达式案例代码——表单验证

目标效果&#xff1a; 1.当输入的手机号&#xff0c;QQ号&#xff0c;昵称&#xff0c;短信验证码&#xff0c;登录密码&#xff0c;确认密码&#xff1a;如果符合标准&#xff0c;就提示正确的文字;如不符合标准&#xff0c;则提示不正确。 2.判断确认密码是否与登录密码相等…

落实交通强国,鄂州临空区联手蘑菇车联打造新时代内陆开放高地

临空经济与智能网联、自动驾驶能擦出什么样的火花&#xff1f;今年7月&#xff0c;鄂州花湖机场投运&#xff0c;标志着这个湖北省“一号工程”正式蝶变为亚洲规模最大、自动化程度行业领先的航空货运枢纽。鄂州花湖机场项目也是湖北加快建设交通强国示范区、打造新时代“祖国立…

Spring Boot配置多个日志文件记录不同类日志示例

了解如何使用多个文件追加器在Spring 引导应用程序中创建多个日志文件。了解如何使用翻转策略、归档等配置所有文件追加器&#xff0c;wiihlog4j2和日志配置。 1. 带登录的多个日志文件 以下文件包含 5 个记录器。我们可以根据需要创建更多的记录器。logback.xml console– …

NeRF源码运行与学习(pytorch)

神经辐射场&#xff08;NeRF&#xff09;是一个简单的全连接网络&#xff08;权重约为5MB&#xff09;&#xff0c;经过训练&#xff0c;可以使用渲染损失再现单个场景的输入视图。网络直接从空间位置和观看方向&#xff08;5D输入&#xff09;映射到颜色和不透明度&#xff08…

翻译文本的软件有哪些?这几个翻译工具你可以试试看

文本翻译&#xff0c;是我们在生活中或工作中比较常见的一个需求。例如有时收到一份英文资料&#xff0c;没时间逐字翻译成中文&#xff0c;那就需要借助翻译工具来帮忙了&#xff1b;或者是有时需要将一些内容翻译成英文&#xff0c;而碰巧遇到句子不知道如何翻译&#xff0c;…

DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述

引言 扩散模型最早是在2015年的Deep Unsupervised Learning using Nonequilibrium Thermodynamics文章中提出的&#xff0c;但当时扩散模型并不work&#xff0c;所以并没有被广泛应用。在2020年&#xff0c;Denoising Diffusion Probabilistic Models(简称为DDPM)的出现&#…

[附源码]java毕业设计校园闲置物品交易

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MCE | 动物实验溶剂大讨论

在动物实验中&#xff0c;药物通常会以溶液 (Solution) 或混悬液 (Suspension) 的形式给药。我们需选择合适的溶剂&#xff0c;可以辅助超声加热措施&#xff0c;得到澄清的溶液或适合给药的混悬液。■ 人见人爱的生理盐水/PBS 对于水溶性很好的产品&#xff0c;用生理盐水 (Sa…

中学数学课程标准(教学大纲)的传承与变迁

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1研究背景及意义 1 1.2研究现状 1 1.3研究内容 3 第二章 1990以来我国中学数学课程标准&#xff08;教学大纲&#xff09;改革回顾 4 2.1改革回顾 4 2.1.1 1990年数学教学改革的内容 4 2.1.2 2001年数学教学改革的内容 5 2.1.3 2011…

XSS(Cross-site Script,跨站脚本)漏洞笔记

起源 最早的 XSS 漏洞可追溯到 1999 年末&#xff0c;微软安全工程师发现一些网站遭到攻击&#xff0c;网站被插入了一些恶意脚本和图像标签。随后&#xff0c;微软对此类漏洞进行研究分析&#xff0c;并在 2000 年 1 月&#xff0c;正式使用“cross-site scripting”这个名称…

C语言-指针初阶(6)

目录 思维导图&#xff1a; 1. 指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针-整数 4.2 指针-指针 4.3 指针的关系运算 5. 指针和数组 6. 二级指针 7. 指针数组…

50行Python代码实现自动下载小说,并打包exe直接

前言 室友喊着没有小说看&#xff0c;让我给他推荐几本&#xff0c;这能难倒我&#xff1f; 分分钟就用python给他把整个网站的小说都给下载下来了&#xff0c;不愧是我啊&#xff01; 话不多说&#xff0c;我们直接开整&#xff01; &#xff08;文末送读者福利&#xff09…

python之爬虫的学习

python爬虫入门-1为什么要学习爬虫浏览器背后的秘密常用网络请求URL解析HTTP常见响应状态码相关库及其简单使用相关引用综合栗子为什么要学习爬虫 现如今&#xff0c;浏览器可以更方便的进行网页交互以人们适合阅读的方式展示数据&#xff1b;但爬虫或者网页抓取对数据的收集和…

第5章 输入/输出(I/O)管理

5.1 I/O管理概述 5.1.1 I/O设备 I/O设备的分类&#xff08;按使用特性分类&#xff09;I/O设备的分类&#xff08;按传输速率分类&#xff09;I/O设备的分类&#xff08;按信息交换的单位分类&#xff09; 5.1.2 I/O控制方式 有4种&#xff1a; 1. 程序直接控制方式2. 中…