关于SpringBoot配置文件 加载多个外部自定义配置文件

spring boot自定义yml配置文件及其外部部署 立什么flag,都是要倒的(摔! 果然就是过个年,开年来项目一来,二月份的博客就欠下了,三月即将结束,惴惴不安,厚着脸皮写个最近用到的,之前没找到很好的资料(大概是搜商颇低导致的)来说这一块的东西:spring自定义配置文件的部署。 文章目录1、序2、加载自定义yml文件2.1、使用@PropertiesSource注解读取yml配置文件-简单版2.2、使用@PropertiesSource注... 阅读详情

Spring Boot项目最终我们会发布为一个jar或war文件部署到生产环境,这十分方便,但在生产环境中我们会遇到一个问题:

Spring Boot在打包时,将项目下所有文件全部压缩到了jar文件内,这使得我们在生产环境下每需要修改某个配置文件属性都需要将项目重新发布,相当反人类。

那么要解决这个问题,我们就需要让项目引用外部配置文件,那么在实际开发环境下,可能我们会存在多个配置文件(我很排斥使用Spring Boot的 Application.Properties作为我项目的配置文件,可能是某种精神洁癖。)比如在我的项目中我目前使用了两个配置文件:

redis.Properties    //redis的配置信息

sysconf.Properties   //系统配置信息

那么,如何在Spring Boot 中引用外部配置文件?

在开始之前,我们先来了解以下Spring Boot的默认配置文件加载流程,Spring Boot中规定默认配置文件名称为:Application.Properties,如果使用默认配置文件,则系统会自动处理文件内外部关系,我们可以看到SpringBoot源码中的加载顺序,优先级从高到低为:

#ConfigFileApplicationListener.java
        private void load(Profile profile, DocumentFilterFactory filterFactory,
                DocumentConsumer consumer) {
            //getSearchLocations()默认返回:
            //[./config/, file:./, classpath:/config/, classpath:/]
            //即搜索这些路径下的文件
            getSearchLocations().forEach((location) -> {
                boolean isFolder = location.endsWith("/");
                //getSearchNames()返回:application
                Set<String> names = (isFolder ? getSearchNames() : NO_SEARCH_NAMES);
                //跟入load(.....)
                names.forEach(
                        (name) -> load(location, name, profile, filterFactory, consumer));
            });
        }
./config/(系统运行根目录config文件夹下)
file:./  (系统运行根目录下)
classpath:/config/  (jar包内resources文件夹config文件夹下)
classpath:/      (jar包内resources文件夹下)

也就是说,如果我们使用application作为配置文件,我们只需要把配置文件放在jar包根目录下,根据优先级,boot会优先选择根目录下的配置文件。

但是,我们上面说过,我不想使用默认文件命名,而且我会有多个配置文件,这样我们如何来做呢?

 

如何在Spring Boot 中引用多个自定义外部配置文件呢?

这里我们需要用到boot的注解方式导入配置文件,@PropertySource()注释可以让我们自定义导入配置文件,使用方法如下:

@PropertySource(value= {"$配置文件路径"},ignoreResourceNotFound = true)

ignoreResourceNotFound 表示如果配置文件找不到是否报错 true:不报错  false:报错

在项目中应用代码如下:

@RestController
@CrossOrigin
@PropertySource(value= {"classpath:config/sysconf.Properties","file:config/sysconf.Properties"},ignoreResourceNotFound = true)
public class spartacus_nodeinteractive 
{
	@Value("${syslog_ip}")
	String syslog_ip;
	
	@RequestMapping(value="/test",method = RequestMethod.GET)
	private String test(HttpServletRequest request,HttpServletResponse response) 
	{
		return syslog_ip;
	}
}

@PropertySource中我添加了两个配置文件路径,外部文件路径和内部文件路径,这样可以让我的系统在没有外部配置文件时也可以正常运行,注意加载顺序,经过测试排在后面的路径优先级高于前面的路径,也就是说这个项目里会以外部配置文件为最高级别。

classpath:表示在包内寻找

file:表示在指定路径下寻找

应用后通过@Value注释获取对应值,多个配置文件就添加多个文件路径,注意优先级顺序就可以了。

然后我们又遇到一个新的问题,每个控制器我都需要加一边配置文件注释,然后都需要使用@value获取一边,这不是代码冗余了吗?解决这个问题,我们可以将配置封装成一个对象

@Component
@ConfigurationProperties(prefix="")
@PropertySource(value= {"classpath:config/sysconf.Properties","file:config/sysconf.Properties"},ignoreResourceNotFound = true)
/**
* @author Song
* @category syconf配置文件
* @serial		【2020年9月18日】	建立函数
*/
public class sysconf
{
	private String syslog_ip;
	private String syslog_port;
	private String debug_log;
	
	public String getSyslog_ip() {
		return syslog_ip;
	}
	public void setSyslog_ip(String syslog_ip) {
		this.syslog_ip = syslog_ip;
	}
	public String getSyslog_port() {
		return syslog_port;
	}
	public void setSyslog_port(String syslog_port) {
		this.syslog_port = syslog_port;
	}
	public String getDebug_log() {
		return debug_log;
	}
	public void setDebug_log(String debug_log) {
		this.debug_log = debug_log;
	}
	
}

封装注意类中变量名与配置文件中的配置属性名相同。

使用方法如下:

@EnableConfigurationProperties(sysconf.class)  //启用系统配置文件  可以直接放在application下

@Autowired
sysconf sysconf;//加载配置文件

sysconf.getSyslog_ip();

@RestController
@CrossOrigin
@EnableConfigurationProperties(sysconf.class)//加载系统配置文件 可以放到app启动类里这里为了方便演示
public class spartacus_nodeinteractive 
{
	@Autowired
	sysconf sysconf;//加载配置文件
	
	@RequestMapping(value="/test",method = RequestMethod.GET)
	private String test(HttpServletRequest request,HttpServletResponse response) 
	{
		return sysconf.getSyslog_ip();
	}
}

这样就方便很多了吧。到此就结束了.....................................不!没有。

———————————————华丽的分割线——————————————

使用上面这种写法时,调用配置文件的所在类必须是被Spring管理的Bean类,也就是使用了@Service、@Controller、@Component、@Configuration等注解的类。那么非管理的类中如何使用配置文件呢?我们需要通过SpringBoot的上下文信息来获取配置文件信息。

config.content = SpringApplication.run(App.class, args);//启动时获取spring上下文

public class config
{
    public static ApplicationContext content;
//静态对象用来储存上下文信息
}

String bind_ip = config.content.getEnvironment().getProperty("syslog_ip");//从上下文中获取需要的配置信息

 

这样总算结束了....写了2个小时....总之技术还要活学活用,实在不行查源码,告辞!

SpringBoot配置Profile以及配置文件的加载位置 Profile介绍 Profile是Spring在不同环境的使用的时候提供的不同的配置方案,在Spring源码中对于Profile的解析也是放在第一位的。Spring配置解析的时候第一个判断的就是Profile,通过这种方式可以进行快速的参数切换。 1、多个profile文件 在配置文件编写的时候可以通过如下的方式进行设置,设置对应的环境参数就可以使用这个而配置方式。 application... 阅读详情

相关推荐

从“破解”到应用:三菱数控系统M80协议逆向分析与工业数据采集网关搭建指南

本文深入解析三菱数控系统M80协议的逆向分析方法与工业数据采集网关搭建技术。通过TCP协议实现跨平台通信,详细介绍了M80协议的数据包结构、多语言实现方案(C#、Java、C/C++)以及Linux数据采集网关的架构设计与容器化部署。为工业自动化领域的开发者提供从协议分析到企业级数据采集落地的完整解决方案。

weixin_29228781的博客 1212

SpringBoot 配置文件源码

bootstrap是在springloud中使用的,加载时机在application之前,应用启动时,会先加载解析bootstrap.yml,创建引导上下文,由引导上下文加载、解析application.yml,创建应用上下文。eg. 在IDEA中调试时,springboot能读取到项目根目录下的配置文件,但maven package时默认不会打包根目录下的配置文件,需要在pom.xml中修改maven的打包配置。指定额外的配置文件位置,这样修改外部配置文件的内容后,无需重新打jar包。

chy-x 的博客 3084

PointNetLK实战:5步搞定点云配准(附ModelNet40数据集训练技巧)

本文提供了一份详细的PointNetLK实战指南,帮助读者在5步内掌握点云配准技术。文章以ModelNet40数据集为例,深入讲解了环境搭建、数据预处理、模型训练与调试等核心步骤,并分享了关键的训练技巧和调参策略,旨在让开发者快速实现并应用这一高效的深度学习配准方法。

wind6的博客 462

springboot项目中Maven打jar包部署服务器引用多环境yml配置文件的三种方式

springBoot配置多环境yml配置,并且打包编译引用外部文件的三种方法

m0_57363611的博客 6573

adams案例分析_案例1(麦弗逊悬架子系统创建)

本文字数3292字83图,建议阅读时间26分钟首先看下案例1的麦弗逊悬架数模结构就不细讲了,从数模上主要是获取硬点坐标(铰接点、安装点、参考点)及大部件结构(副车架、摆臂、转向节等实际运动过程中会产生变形的部件,在ADAMS Car中我们就可以用柔性体来搭建)再来回顾下上一篇讲到的模型元素1、Hardpoint——硬点(只有位置没有方向)2、Parameter Variable——参数...

weixin_39609407的博客 6475

扣子(coze)实战 | 一键生成爆款书单视频

摘要:本文介绍了一个基于DeepSeek和Coze平台实现短视频高效生成的工作流方案。该方案耗时仅1-2分钟即可完成"假如书籍会说话"类短视频制作,包含书籍内容深度解读、对话台词生成、自动配音、素材合成等环节,支持通过剪映进行二次编辑。作者分享了完整开发思路和8个工作模块,并开放了包含该工具在内的100+智能体共享空间,提供会员专属服务。该方案为非真人出镜短视频的批量化生产提供了可行方案。

yueyehuguang的博客 2394

【springboot】多环境文件配置

一、多配置文件 在实际开发项目中,我们开发环境、测试环境、补丁环境都是有不同的配置的。各个环境可能用不同的数据库,为了便于开发,spring提供了多环境配置文件切换功能。比如:application-dev.yml表示测试环境配置、application-test.yml表示测试环境配置、application-prod.yml表示补丁环境配置、application.yml则是默认环境。如此,...

隐市高手 5985

gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成

城市道路网建模在获得基础路网之后,需要考虑道路交通网络的描述与表达问题。网络是将现实世界中的事物及其关系进行适当的抽象,构造成由节点和边按照一定规则组成的形式。一个实体网络可以由有限个“节点”集合与“边”集合构成的图表示,即网络表示为。对于一个由个节点组成的无权复杂网络,该图有邻接矩阵,这里。根据研究对象不同,建模方法主要包括原始法[1]和对偶法[2]两种,见图1,字母a-j为交叉口编号...

weixin_39761195的博客 3502

关于springboot 多个配置文件的配置

关于springboot 多个配置文件的配置

做一个有思想的技术人 7611

logisim实验六:MIPS运算器设计

实验目的 学生理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的 32 位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。 设计要求 利用前面实验封装好的 32 位加法器以及 logisim 平台中现有运算部件构建一个 32 位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号

gyp0205的博客 2万+

利用大规模生物活性挖掘,计算识别针对癌基因驱动蛋白 EGFR、BRAF 与 CDK4 的高亲和力抑制剂

背景:精准癌症治疗需要小分子抑制剂与致瘤蛋白靶点之间的精确匹配。方法:我们使用 Python 及 ChEMBL 数据库 API 开发了一套计算流程,系统性地筛选针对 EGFR、BRAF 与 CDK4 的高亲和力配体。对 IC50 < 1000 nM 的生物活性进行过滤,并检索候选化合物的分子结构(SMILES)以供后续优化。结果:本研究共识别出 [插入总数] 种独特化合物。其中,对 BRAF 激酶而言,我们挑选了一批 IC50 低至 6.0 nM 的高效实验性化合物。

u012133341的博客 95

springboot加载多个配置文件

默认配置文件 当我们创建一个springboot项目的时候,系统默认会为我们在src/main/Java/resources目录下创建一个application.properties。 springboot如何同时加载多个配置文件? 1. springboot 默认是在src/main/resources文件夹中加载application.properties默认配置文件 格式为appl...

Leisurelyc的博客 1189

使用OpenGL加载和显示DXF格式的3D模型文件编程

这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。

2301_79331421的博客 412

springboot加载外部xml_SpringBoot读取外部配置文件的方法

1.SpringBoot配置文件SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。以设置应用端口为例properties文件示例(application.properties):server.port=80YAML文件示例(application.yml):serv...

weixin_39607836的博客 2068

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SpringBoot配置加载,各配置文件优先级对比

目录 1.SpringBoot配置文件 两者同时存在情况 2.配置文件目录 3.自定义配置属性 @ConfigurationProperties与@Value两种注解对比 自定义配置提示 4.指定配置文件 @PropertySource使用 装配yaml配置文件 @ImportResource使用 1.SpringBoot配置文件 SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml

数据与算法架构提升之路专栏 3867

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

外置配置springboot配置

允许灵活地指定 Spring Boot 应用的配置文件路径。它适用于多环境部署、外部化配置、动态加载等场景。注意区分和的区别,避免覆盖默认配置文件时出现意外行为。

isAchilles 1098

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

spring-boot: 加载其他的属性文件

Spring Boot and multiple external configuration files Load multiple configuration files from different directories with Spring Boot http://roufid.com/load-multiple-configuration-files-di...

jupiter_888的博客 190

11 Springboot 默认配置文件、外部配置文件、加载顺序

通常情况下,Spring Boot 在启动时会将 resources 目录下的 application.properties 或 apllication.yml 作为其默认配置文件,我们可以在该配置文件中对项目进行配置,但这并不意味着 Spring Boot 项目中只能存在一个 application.properties 或 application.yml。Spring Boot 项目中可以存在多个 application.properties 或 apllication.yml。

zhr2376494700的博客 5511

SpringBoot加载外部配置文件

背景 最近被抓壮丁处理Spring上的问题, 由于业务需要,需要单独设置一个配置文件 [ common.properties] ,根据配置文件里面的内容进行加载配置项,处理数据. 但是遇到一个问题, 代码里面加载的时候,只能加载jar里面的common.properties配置文件, 外面config目录里面的common.properties配置文件不生效,只能加载jar里面的配置文件, 如果把jar里面的配置文件删掉的话,会报错..... 原因 伪代码: InputS...

张伯毅的专栏 6877

SpringBoot配置文件加载顺序

SpringBoot配置文件加载顺序

scorpio的博客 2万+

SpringBoot读取外部配置文件的方法

点击上方「蓝字」关注我们1.SpringBoot配置文件SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文...

独行侠梦的博客 2万+

Springboot加载外部配置文件的方法

1. 项目内部配置文件 以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容。 SpringBoot会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置。 我们也可以通过配置spring.config.location来改变默认配置。 java -jar spring-b...

qq_41665121的博客 1万+

11Springboot的默认配置文件和外部配置文件及加载顺序

通常情况下,Spring Boot 在启动时会将 resources 目录下的 application.properties 或 apllication.yml 作为其默认配置文件,我们可以在该配置文件中对项目进行配置,但这并不意味着 Spring Boot 项目中只能存在一个 application.properties 或 application.yml。 默认配置文件 Spring Boot 项目中可以存在多个 application.properties 或 apllication.yml。 S

qq_41946216的博客 5160

springBoot加载配置文件

(1) 说明(2)示例 2.2 @ConfigurationProperties (1) 说明(2)示例 2.3 Environment (1) 说明(2)示例 3. 引入外部配置文件 3.1 @PropertySource (1) 说明(2)示例 3.2 PropertySourcesPlaceholderConfigurer (1) 说明(2)示例 3.3 直接加载并获取配置信息 (1) 说明(2)示例 3.4 命令行参数 (1) 说明(2)示例 4. 分环境加

zp的博客 3714

SpringBoot-配置文件加载

springboot配置文件加载原理解析

wlphlj的专栏 7113

Spring Boot 配置文件加载的优先级和指定多个外部配置文件

项目配置很多,所以对配置归类到了不同的配置文件中,如下: springboot 默认加载的配置文件为 application.properties ,为了正常加载其他配置文件,在启动类上做了如下引用处理: @SpringBootApplication @PropertySources({ @PropertySource(value = "mybatis.properties", ignoreResourceNotFound = true), @PropertySource(value = "co

小单的博客专栏 4164
上一篇: springboot项目发布后执行报错 “没有主清单属性”
FormatWindowsXP
博客等级 码龄14年 4粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值