【springboot】读取外部的配置文件

news/2024/11/28 5:30:34/

springboot】读取外部的配置文件

  • 一、使用场景
  • 二、代码实现
    • (一)application.yml 的配置
    • (二)编辑 customer.yml
    • (三)自定义方法读取外部配置文件
    • (四)使用外部配置文件的配置

一、使用场景

假设有一个买卖商品的系统,客户希望能灵活修改首页推荐商品的个数 num

如果 num 是写在代码里的固定值,每次修改,开发人员就得重新将系统打包部署上线,费时费力。

但如果 num 是写在 jar 包的外部配置文件中,开发人员只需要修改该外部配置文件,然后重启已经部署上线的系统,就可以达到灵活修改 num 的效果啦。

二、代码实现

(一)application.yml 的配置

配置外部文件的路径,这里是 customer.yml,和 src 文件夹同级,如图。

customer:path: customer.yml

在这里插入图片描述

(二)编辑 customer.yml

这里配置了一个 num,值是 5

num: 5

(三)自定义方法读取外部配置文件

java">import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;import java.io.File;
import java.util.Properties;public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {@Overridepublic void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {//自定义配置文件,对应 application.yml 里的前缀String profiles = environment.getProperty("customer.path");//加载成PropertySource对象,并添加到Environment环境中File file = new File(profiles);Resource resource = new FileSystemResource(file);environment.getPropertySources().addLast(loadProfiles(resource));}/*** 加载单个配置文件* @param resource* @return*/private PropertySource<?> loadProfiles(Resource resource) {// 判断资源是否存在if (!resource.exists()) {throw new IllegalArgumentException("资源" + resource + "不存在");}// 判断后缀名,兼容 .yml 文件和 .properties 文件if (resource.getFilename().contains(".yml")) {return loadYaml(resource);} else {return loadProperty(resource);}}/*** 加载properties格式的配置文件** @param resource* @return*/private PropertySource loadProperty(Resource resource) {try {//从输入流中加载一个Properties对象Properties properties = new Properties();properties.load(resource.getInputStream());return new PropertiesPropertySource(resource.getFilename(), properties);} catch (Exception ex) {throw new IllegalStateException("加载配置文件失败" + resource, ex);}}/*** 加载yml格式的配置文件** @param resource* @return*/private PropertySource loadYaml(Resource resource) {try {YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();factory.setResources(resource);//从输入流中加载一个Properties对象Properties properties = factory.getObject();return new PropertiesPropertySource(resource.getFilename(), properties);} catch (Exception ex) {throw new IllegalStateException("加载配置文件失败" + resource, ex);}}
}

(四)使用外部配置文件的配置

java">import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@Autowiredprivate Environment environment;@GetMapping("/test")public void test() {// 读取 num 配置值,不为空则输出String num = environment.getProperty("num");if (num != null && !num.equals("")) {System.out.println("num = " + num);} else {System.out.println("num is null or ''");}}
}

http://www.ppmy.cn/news/1550539.html

相关文章

Node.js的url模块与querystring模块

新书速览|Vue.jsNode.js全栈开发实战-CSDN博客 《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;&#xff08;Web前端技术丛书&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 4.3.1 http模块——创建HTTP服务器、客户端 要使用http模块&#xff0…

mac 安装node提示 nvm install v14.21.3 failed可能存在问题

如果你在 macOS 上使用 nvm&#xff08;Node Version Manager&#xff09;安装 Node.js 版本 v14.21.3 时遇到安装失败的问题&#xff0c;可以按照以下步骤进行排查和解决&#xff1a; 1. 确认 nvm 安装是否正确 首先&#xff0c;确认你的 nvm 是否正确安装&#xff0c;并且能…

数据结构(汇总)

1.1.1 基本概念 数据&#xff1a;数据是信息的载体&#xff0c;是描述客观事物属性的字、字符及所有能输入到计算机并且被计算机程序识别和处理的符号的集合。&#xff08;数据是计算机程序加工的原料&#xff09; 数据元素、数据项&#xff1a; 数据元素是数据的基本单位&am…

Vue前端开发-slot传参

slot 又称插槽&#xff0c;它是在子组件中为父组件提供的一个占位符&#xff0c;使用来表示&#xff0c;通过这个占位符&#xff0c;父组件可以向中填充任意的内容代码&#xff0c;这些代码将自动替换占位符的位置&#xff0c;从而轻松实现在父组件中控制子组件内容的需求。 作…

R中单细胞RNA-seq数据分析教程 (2)

引言 本系列开启R中单细胞RNA-seq数据分析教程[1]&#xff0c;持续更新&#xff0c;欢迎关注&#xff0c;转发&#xff01; 导入Seurat包 首先&#xff0c;请确认你的R软件已经安装了Seurat这个包。 library(Seurat) 这会将您已安装的Seurat包载入您当前的R环境中。通常不会出现…

Android 项目引入gradle Connect timed out

Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-6.7.1-all.zip. Reason: java.net.SocketTimeoutException: Connect timed out 通过离线下载对应版本的gradle Index of /gradle/ 打开配置文件&#xff1a;gradle/wrapper…

自主研发,基于PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发的不良事件管理系统源码,不良事件管理系统源码

不良事件上报系统源码&#xff0c;不良事件管理系统源码&#xff0c;PHP源码 不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0…

HTML常用表格与标签

一、table表格标签&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!--有大小为1的边框--> <table border"1">…