当前位置: 首页 > ai >正文

SpringBoot的外部化配置

一、什么是外部化配置

外部化配置是指把应用程序中各种可配置的参数、属性等信息,从代码内部提取出来,放置在外部的配置文件、数据库或配置中心等地方(比如使用.properties、.yml 或.xml 等格式的文件)进行管理。提高应用程序的可维护性、可扩展性和灵活性。通过将配置信息外部化,无需修改和重新部署代码,就可以调整应用程序的行为和参数,以适应不同的环境(如开发、测试、生产环境)或业务需求的变化。

二、springboot默认读取路径

springboot默认的配置文件是application.properties,通过springboot自动的脚手架生成的文件结构如下。其application.properties位于resource下方。

2.1 类路径下

创建一个配置类,在配置类中访问配置文件中的myapp.name的值,看看springboot的应用程序会不会自动找到其application.properties中的内容。

package com.example.propertieslocation.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;//纳入IoC容器管理
@Component
public class appConfig {@Value("${myapp.name}")private String appPath;public void printInfo(){System.out.println("App Path: " + appPath); }}

 在test中进行测试,发现springboot程序确实可以找到application.properties中的内容。

2.2 类路径下的config下

 在其类路径下新建config目录,并在该目录中新建application.properties

 再次进行测试,看看其找到的application.properties的文件到底位在哪。

可以看出来其优先找了config目录下的application.properties。

2.3 外部化的直接路径

在打包成jar包之前,主入口类添加如下代码。

package com.example.propertieslocation;import com.example.propertieslocation.config.appConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplication
public class PropertiesLocationApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(PropertiesLocationApplication.class, args);appConfig appConfig =  context.getBean(appConfig.class);appConfig.printInfo();context.close();}}

点击package打包使其成为jar包。

打包好的jar包如下

并新建application.properties

 进行测试,看springboot程序自动优先找到的是那个路径下的配置文件

 测试结果如下

优先选择了外部化配置的 application.properties。

2.4 外部化路径下的config目录中

 

并将外部化配置的config中application.properties的内容改成myapp.name=file:./config/。

测试如下:

总结

所以springboot程序查找application.properties的顺序是,外部>内部;config中的>当前路径下的。

http://www.xdnf.cn/news/5901.html

相关文章:

  • 软件测试(1) 软件测试概述
  • 【Qt开发】信号与槽
  • 【技术追踪】InverseSR:使用潜在扩散模型进行三维脑部 MRI 超分辨率重建(MICCAI-2023)
  • Ansible安装与核心模块实战指南
  • 如何正确地写出单例模式
  • 嵌入式软件--stm32 DAY7 I2C通讯上
  • 码蹄集——分解、数组最大公约数、孪生质数、卡罗尔数、阶乘数
  • PY32系列单片机离线烧录器,可配置选项字节和上机台批量烧录
  • The Deep Learning Compiler: A Comprehensive Survey (深度学习编译器:全面调查)
  • milvus+flask山寨《从零构建向量数据库》第7章case2
  • FPGA图像处理(六)------ 图像腐蚀and图像膨胀
  • 【图像处理基石】遥感图像分析入门
  • stm32f103rct6中使用串口1 DMA通信程序含异常处理
  • 数据验证库pydantic的用法
  • 力扣热题——统计平衡排列的数目
  • 进程间通信分类
  • 数组练习题
  • 采购流程规范化如何实现?日事清流程自动化助力需求、采购、财务高效协作
  • 动态查找滚动容器(通用方案)
  • 故障诊断模型评估——混淆矩阵,如何使样本量一致(上)
  • 深入浅出之STL源码分析8_三个指针
  • PostgreSQL 恢复信息函数
  • Android Exoplayer多路不同时长音视频混合播放
  • window 显示驱动开发-报告图形内存(一)
  • ElasticSeach快速上手笔记-入门篇
  • VScode 的插件本地更改后怎么生效
  • 嵌入式学习--江协51单片机day5
  • React百日学习计划——Deepseek版
  • 销量预测评估指标
  • 【工作记录】Kong Gateway 入门篇之部署及简单测试