Spring实战系列(二)-有关属性配置文件的加载和使用

不看后悔系列-Spring源码(三):Environment接口体系 这一章不难哦!耐心看下去,只有到最后才有恍然大悟的感觉! 一、Environment接口体系介绍 老规矩,先看类图设计(常回家看看) 根据各路大佬解说,可以总结出来,整个Environment接口体系具体可以分成三部分: properties:属性 简单来说就是对key-value数据的操作(增删改查)。从Spring角度看,properties存储了环境变量以及用户提供的key-value数... 阅读详情

"对于Spring框架,现实公司使用的非常广泛,但是由于业务的复杂程度不同,了解到很多小伙伴们利用Spring开发仅仅是利用了Spring的IOC,即使是AOP也很少用,但是目前的Spring是一个大家族,形成了一个很大的生态,覆盖了我们平时开发的方方面面,抛开特殊的苛刻要求之外,Spring的生态其实已经很全面了,所以在此开个系列来研究下Spring提供给我们的一些平时不太却又很实用的内容。"

说明:

  我们平时使用Spring进行开发的时候经常会需要加载配置文件,而且Spring加载配置文件的方式又提供了很多种,我这次先把一些普通的加载方式说明下,然后再就一些比较特殊的情况的加载进行说明。

  1、常用加载方式:

     1.1、xml中进行配置文件引入

<context:property-placeholder location="classpath:config/*.properties"  file-encoding="utf-8"/>

    这个还有个原始的配置是配置 一个PropertyPlaceholderConfigurer

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="location">
       <value>conf/jdbc.properties</value>
     </property>
      <property name="fileEncoding">
       <value>UTF-8</value>
    </property>
</bean>

   1.2、通过注解进行导入

@PropertySource(value = "properties/config.properties")

  以上是导入一个配置文件,如果需要导入多个,value是支持数组的,还有一个注解是@PropertySources,他是支持@PropertySource的数组格式。根据需要进行选用。

 1.3、通过定义PropertyPlaceholderConfigurer的Bean来进行加载

    @Bean
    public PropertyPlaceholderConfigurer initPropertyPlaceholderConfigurer() {
        PropertyPlaceholderConfigurer placeholderConfigurer = new PropertyPlaceholderConfigurer();
        placeholderConfigurer.setLocation(new ClassPathResource("properties/*.properties"));
        placeholderConfigurer.setFileEncoding("UTF-8");
        return placeholderConfigurer;
    }

以上是加载配置文件的几种方式,springboot是内部已经配好了扫描跟路径下的application.properties文件。

接下来进入我们今天的重点,如何使用已经导入配置文件中的属性。

2、使用配置文件中的属性

   2.1、xml中使用--占位符

<mongo:mongo-client id="dataMongoConnection" replica-set="${mongo.data.hostport}" credentials="${mongo.data.username}:${mongo.data.password}@admin">
    <!--<mongo:mongo-client id="dataMongoConnection" replica-set="${mongo.data.hostport}">-->
        <mongo:client-options connections-per-host="${mongo.data.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.data.threadsAllowedToBlockForConnectionMultiplier}"
                              connect-timeout="${mongo.data.connectTimeout}"
                              max-wait-time="${mongo.data.maxWaitTime}"

                              socket-keep-alive="${mongo.data.socketKeepAlive}"
                              socket-timeout="${mongo.data.socketTimeout}"/>
</mongo:mongo-client>
2.2、注解的使用
    @Value("${jdbc.username}")
    private String username;

 以上是经常使用的方式,接下来将一个不常用的方式,有时候我们在引入Spring的第三方工具包的时候,有时在采用注解配置第三方核心配置类的时候发现采用注解引入属性值的时候发现不起作用,观察这些配置类的时候会发现他们经常会实现Spring的一些顶级接口类,例如:BeanDefinitionRegistryPostProcessor。因为PropertyPlaceholderConfigurer的初始化级别是最低的,当在注册这些顶级Bean的时候,我们的属性值是还没有被赋值的,所以导致属性值都是初始化值,如何解决这种情况呢,有2种方式。

方式一:

在Spring调用加载配置文件的时候,有一个通用类可以获取到当前环境的属性文件上下文Environment,我们可以直接通过注解直接引入这个类。

@Autowired
private Environment environment;
在获取到这个类之后我们就可以自由的操作属性值了,操作如下:
environment.resolvePlaceholders("${dataSource.url}");
        environment.resolvePlaceholders("${dataSource.username}");
        environment.resolvePlaceholders("${dataSource.password}");

这时候就解决@Value不可用的问题,其实代码environment.resolvePlaceholders("${dataSource.url}");这个被调用后返回的是解析后的字符串值,这点也要注意下。

方式二:

这个方式比较笨拙,就是将这种顶级配置类单独放到一个配置类中进行配置,而且仅限该类没有属性需要配置的情况下。这种情况使用很特殊,大家可以忽略。

以上便是我今天要分享的实战内容,虽然知识点不多,但是也是实际开发中遇到的,希望对大家有所帮助。

Spring进阶(十九)之配置动态刷新 Spring中的@Value你真的会用吗?动态刷新你会吗? 阅读详情

相关推荐

死磕源码系列【PropertySourceLoader加载properties、yml配置文件源码详解】

PropertySourceLoader接口实现类用来在项目启动的时候加载properties、xml、yml配置文件,其实现类一共有两个PropertiesPropertySourceLoader、YamlPropertySourceLoader,分别用来加载 properties文件及yml配置文件; PropertiesPropertySourceLoader、YamlPropertySourceLoader两个实现类是通过springboot SPI机制在ConfigFileApplicatio.

OceanSky的专栏 4666

Spring核心源码流程(白话文)

1.源码复习前,概要 ApplicationContext的顶级接口为BeanFactory,其下的ConfigurableApplicationContext扩展了 refresh(),close()等方法,使其具备刷新、关闭上下文的能力 ApplicationContext:应用上下文,Bean的创建,管理等核心功能实际上还是由BeanFactory进行的 ***重点核心 refresh() 方法1.prepareRefresh() a.刷新前的准备工作,实际上就是创建...

m0_49151953的博客 1150

SpringBoot获取YAML配置文件中的属性值(二):使用Environment环境组件读取值

Spring Boot 提供的 Environment 接口提供了一种机制,使得应用程序能够轻松地获取和操作配置属性。这些属性通常来源于不同的渠道,如命令行参数、系统环境变量、配置文件(如:application.properties 或 application.yml )等,这些配置文件可以放置在不同的位置,如项目的classpath、文件系统或外部存储等。Environment 允许为不同的环境配置不同的 Profile,例如:dev(开发)、test(测试)、prod(生产)等。

pan_junbiao的博客 540

environment.resolvePlaceholders占位符解析优化

environment.resolvePlaceholders占位符解析优化

兮动人 773

Spring Boot 属性加载原理解析

在《[Spring Boot 框架整体启动流程详解](https://itsaysay.blog.csdn.net/article/details/130981611)》中,我们了解到有一步是准备环境prepareEnvironment,属性加载就是在这一步开始的

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 3420

SpringBoot系列之配置文件加载位置

SpringBoot系列之配置文件加载位置 SpringBoot启动会自动扫描如下位置的application.properties或者application.yml文件作为Springboot的默认配置文件 * project:/config/(项目根目录下面config文件夹里的配置文件) * project:/(项目根目录下面的配置文件) * classpath:/config/(Resources文件夹下面config文件夹里的配置文件) * classpath:/(Resources文件夹下面的

Nicky's blog 5557

Spring系列之@Value【用法、数据来源、动态刷新】

面试官:Spring中的@Value用过么,介绍一下 我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以将数据库的一些配置信息放在配置文件中,然后通过@Value的方式将其注入到bean的一些字段中 面试官:那就是说@Value的数据来源于配置文件了? 我:嗯,我们项目最常用更多就是通过@Value来引用Properties文件中的配置 面试官:@Value数据来源还有其他方式么? 我:此时我异常开心,刚好问的我都研究过,我说:当然有,可以将配置信息放在db或者其他存储介质中

azhou的代码园 7190

掌握Spring框架动态配置文件加载技巧

随着应用规模的增长,传统的单体应用逐渐演变为微服务架构。在微服务架构中,一个应用往往由多个服务实例组成,每个实例可能需要配置不同的参数。手动管理这些配置变得异常困难和容易出错。因此,远程配置管理应运而生。远程配置管理可以在不重启服务的情况下,对各个微服务的配置进行统一管理,修改配置后可以实时生效。这极大地提高了配置管理的效率和灵活性,减少了因配置变更导致的服务中断时间。

weixin_35751412的博客 709

Spring Boot系列四 Spring @Value 属性注入使用总结一

@Value注入不通过配置文件的注入属性的情况通过@Value将外部的值动态注入到Bean中,使用的情况有: 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性:注入beanInject对象的属性another 注入文件资源 注入URL资源详细代码见: @Value("normal") private String normal; // 注入普通字符串 @V

不积跬步无以至千里; 不积小流无以成江海 12万+

ADC(三)Guard ring的设计艺术:从单元到系统的隔离策略

本文深入探讨了ADC设计中Guard ring(保护环)从单元到系统的多层次隔离策略。文章分享了从新手到专家的认知升级过程,详细分析了在单元内部进行微隔离、在模块间建立噪声屏障以及在系统层面规划全局隔离带的实用方法与设计艺术,强调了Guard ring对于提升混合信号电路性能和可靠性的关键作用。

weixin_28312391的博客 150

(53页PPT)新型智慧病房整体解决方案(附下载方式)

当前医疗场景存在三大核心矛盾:院内感染风险(如输液异常发现滞后)、信息孤岛现象(11类业务系统数据割裂)、管理效能不足(30%护理时间耗费在机械性工作)。实际案例显示,整体运营效率提升40%,患者满意度提高28个百分点,真正实现了"让技术有温度,让数据会说话"的价值理念。本文将从需求分析、技术架构、应用场景三个维度,深度剖析这份53页解决方案的创新价值与实践路径。床旁智能终端整合12项功能:包括体征自动采集(误差率<1%)、医嘱执行核对(100%条码校验)、智能床垫离床报警(响应时间3秒)等。

AI_data_cloud的博客 716

【Spring全家桶系列】Spring下加载properties文件

前面我们在实现第三方数据库连接池小案例的时候,我们是需要配置我们数据库的一些基本信息的,但是在实际的项目中,开发环境用一个数据库,生产环境又是另外一个数据库,如果程序开发好了,我们想要上线我们的程序,这些配置那肯定的改,那我们不得一个一个改,为了解决这个问题,我们引入properties配置文件。

未见花闻的博客 2037

AD学习笔记(一)基础认识

文章目录AD学习笔记第一讲 AD基础认识一、两库两图(分别对应下图)1、PCB图(pcbdoc)2、原理图(schdoc)3、原理图库(schlib)4、PCB库(pcblib)二、封装1、DIP封装2、LQFP封装三、绘制整体流程1、建立工程(PrjPcb)2、建立两库两图并保存整个工程(五次)3、从库中提取绘制原理图4、原理图导入pcb图5、根据原理图布线6、pcb图交由工厂打板 AD学习笔记 第一讲 AD基础认识 一、两库两图(分别对应下图) PCB图(pcbdoc) 原理图(schdoc) PCB库

qq_52465473的博客 6686

【spring源码系列-03】xml配置文件启动spring时refresh的前置工作

sml配置文件启动spring时refresh的前置工作

zhenghuishengq的博客 1万+

Google Play上架:谷歌2024年5月份审核政策改动,审核强度逐步提升

Google Play上架:谷歌2024年5月份审核政策改动,审核强度逐步提升

专业解决各种上架过包问题,专业团队专业处理 3187

ESP32-C3入门教程 环境篇②——Windows开发环境准备

文章目录一、注意事项二、下载ESP-IDF工具安装器三、安装内容四、详细安装步骤报错处理 一、注意事项 请注意 ESP-IDF 和 ESP-IDF 工具的安装路径不能超过 90 个字符,安装路径过长可能会导致构建失败。 Python 或 ESP-IDF 的安装路径中一定不能包含空格或括号。 除非操作系统配置为支持 Unicode UTF-8,否则 Python 或 ESP-IDF 的安装路径中也不能包括特殊字符(非 ASCII 码字符、中文字符) 二、下载ESP-IDF工具安装器 ESP-IDF Win

5243

Spring Boot 配置文件启动加载顺序

Spring Boot的启动加载顺序是一个涉及多个步骤和组件的过程。Spring Boot通过一系列默认设置简化了应用程序的配置,使得开发者能够快速地搭建和部署应用。为了实现这一目标,Spring Boot采用了一种分层和优先级机制来加载配置文件。

A_aspectJ的博客 3344

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7432

Spring使用@Value注解与@PropertySource注解加载配置文件

1、@Value注解简介 Spring框架提供的@Value注解可以将外部的值动态注入到Bean中,@Value注解使用在字段、构造器参数和方法参数上。@Value可以指定属性取值的表达式,支持通过#{}使用SpringEL来取值,也支持使用${}来将属性来源中(Properties文件、本地环境变量、系统属性等)的值注入到Bean的属性中。此注解值的注入发生在AutowiredAnnotati...

pan_junbiao的博客 7651

杰理AC695N/AC696N/AC701N系列芯片在线调音教程

本教程详细介绍AC695N/AC696N/AC701N芯片在线音效调试方法,包括工具准备(需安装杰理包管理器)、程序修改(需关闭USB功能并启用在线调试宏)、连接方式(USB或串口)、音效调节步骤(EQ和混响参数调整)以及配置保存。注意事项包括版本匹配、连接检查和供电稳定等,并提供常见问题解决方案。适用于快速配置实时音效调试环境并保存最终配置。

qq_42014563的博客 1400

2026 年第十六届MathorCup数学应用挑战赛题目C题中老年人群高血脂症的风险预警及干预方案优化 2026妈妈杯 详细思路、代码、模型

2026 年第十六届MathorCup数学应用挑战赛题目 C题中老年人群高血脂症的风险预警及干预方案优化 人口老龄化进程的持续加快,使得40岁及以上中老年人群成为 慢性病防控的核心群体,其中高血脂症的发病率呈逐年攀升态势, 已成为诱发冠心病、脑梗死等心脑血管疾病的重要危险因素,严重 威胁中老年群体的心血管健康与生活质量,也加重了基层医疗的慢 病管理负担。从中医体质学视角来看,体质禀赋与偏颇是疾病发生 发展的内在根基,其中痰湿体质为中老年高血脂症的高发体质类型, 该体质人群存在痰湿内蕴、脾胃运化失常、水湿代谢

YOLO 754

你不知道系列--Spring是如何加载配置文件

Spring如何加载配置文件 面试的时候经常会有面试官问Spring知识点,面试官问到Spring是如何加载配置文件的,流程清楚吗?求职者:在web.xml中会指定pring配置文件路径,就会实现加载了。面试官:那你能说说流程吗?求职者:emmmm…这个时候就会很尴尬了。 任何事情不能局限于表面,需要有求知意识,尽自己能力和理解去探求真相,当然这个也不是一蹴而就,是一个循序渐进的过程,重要的是在这...

qq_41714882的博客 689

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring系列——Spring MVC配置文件

Spring系列——Spring MVC配置文件一、前端控制器DispatcherServlet二、RequestMapping注解1、使用方法1.1、 标注在方法上1.2、 标注在类上2、RequestMapping注解的属性3、组合注解三、ViewResolver 视图解析器四、SpringMVC.xml配置文件1、普通形式SpringMVC配置文件2、注解形式SpringMVC配置文件 一、前端控制器DispatcherServlet DispatcherServlet的全名是org.springfr

mumuwei的博客 6311

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring Boot 配置文件有哪些?优先级谁最高?

Spring Boot 配置文件主要包括 .properties、.yml、.yaml 以及 bootstrap 系列文件。bootstrap 配置文件加载优先级最高,常用于系统级通用参数;application 配置文件后加载,多用于应用级参数。同一类配置文件中,优先级顺序为:.properties 高于 .yml,.yml 高于 .yaml。若不同配置文件配置同一属性,高优先级文件会覆盖低优先级文件;若配置不同属性,则可以叠加生效。

m0_70325779的博客 1923

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java系列 - Spring 加载配置项的四种方式

spring框架默认加载配置:示例: 1. spring 加载 yml 文件 上面已经通过默认的方式演示了如何加载默认的application.yml,但是更好的写法是,将我们自定义的配置独立为一个单独的文件。 比如我们开发微信公众号,小程序开发时,就需要用到配置,此时的配置就应该独立为一个额外的文件。(此处将演示加载为 List)一共有3步:示例: 测试结果 从上一步我们已经知道了, spring 默认使用 properties 文件的加载器。因此,我们可以少一步构造加载器 测试: 3.

ifredom 4915

springboot系列教程(三十三):SpringBoot 之属性加载详解

springboot系列教程(三十三):SpringBoot 之属性加载详解

weixin_43860634的博客 1257
上一篇: Spring实战系列(一)-监听器模式开发
下一篇: Spring实战系列(三)-BeanPostProcessor的妙用
轻鸿飘羽
博客等级 码龄16年 124粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值