web应用中Spring ApplicationContext的动态更新

Spring Boot 启动原理深度解析:从 SpringApplication 到 ApplicationContext Spring Boot 启动过程并非黑盒,而是由 SpringApplication 驱动的标准化初始化流水线。其核心原理涵盖环境准备、上下文构建与启动收尾三大阶段,依赖 ApplicationContextInitializer、ConditionEvaluationReport 等关键机制实现条件化自动配置。该设计在保障开发效率的同时,也带来 DataSource 配置缺失、Web 类型误判、Bean 扫描越界等典型故障。理解这一原理,是诊断 NoSuchBeanDefinitionException、 阅读详情

在web应用中时常需要修改配置,并动态的重新加载ApplicationContext。比如,设置和切换数据库。以下给出一个方法,并通过代码验证可行性。

  方法的基本思路是,为WebApplicationContext指定一个上级ApplicationContext,然后需要更新的时候先得到它的引用,再调用refresh方法重新加载。如果直接获得WebApplicationContext实例,重新加载(refresh),得不到预期的效果。

  在本示例中,classpath下有一个config.properties文件,定义了derby数据库的属性:

jdbc.driverClassName=org.apache.derby.jdbc.EmbeddedDriver jdbc.url=jdbc:derby:target/database/helloworld;create=true jdbc.username=test jdbc.password=test

hibernate.dialect=org.hibernate.dialect.DerbyDialect hibernate.show_sql=true hibernate.hbm2ddl.auto=create-drop

  在spring配置文件中定义了两个config.properties文件位置:

<property name="locations"><list><value>classpath:config.properties </value><value>file:/${user.home}/config.properties </value></list></property>

 

  如果没有用户目录下的config.properties文件,则classpath下的生效。这时如果在用户目录下部署了新的config.properties文件,内容是mysql数据库设置:

 

jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost/mydb?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect hibernate.show_sql=true hibernate.hbm2ddl.auto=create

  这时通过浏览器访问示例的reload.jsp页面,将调用一个刷新ApplicationContext的方法,将会读取用户目录下的属性文件,从而将hibernate环境从derby数据库切换到mysql数据库下,这个过程不需要重启tomcat或者reload web应用。

  reload.jsp中调用的类(spring.WebapplicationContextReloader)主要代码如下:

WebApplicationContext context = WebApplicationContextUtils .getWebApplicationContext(request.getSession() .getServletContext());
if (context.getParent() !=null)
{ ((AbstractRefreshableApplicationContext) context.getParent()) .refresh(); }
((AbstractRefreshableApplicationContext) context).refresh();

 

  上级ApplicationContext,需要这样配置,首先,在web.xml文件中增加一个上下文变量的赋值:
<context-param><param-name>parentContextKey</param-name><param-value>mycontext</param-value></context-param>

  用来指明上级ApplicationContext的名字,在这里是mycontext。然后,在classpath的根下,建一个beanRefContext.xml文件,用来创建这个ApplicationContext实例,这里的文件名是规定的,Spring会根据约定找到它。

<bean id="mycontext" class="org.springframework.context.support.ClassPathXmlApplicationContext">
<
constructor-arg><list><value>services-context.xml</value></list></constructor-arg><
/
bean>

 

  在上面的配置中指明创建这个ApplicationContext所需的配置文件。这样,就实现了一个简单的可动态reload的web环境下的ApplicationContext。

示例的完整代码,见svn:

https://dev.easymorse.com/svn/tutorials/spring/tags/reload.test-1.0

Spring MVC开发配置文件 applicationContext Spring Web MVC开发 xml配置文件格式,无bean之类 Spring Web MVC开发配置文件 applicationContext 立即下载

相关推荐

4.图像sensor的特性和驱动解析

例子:sensor驱动自己提供操作曝光时间的函数和获取曝光时间的函数,然后将这个函数注册到ISP库和3A算法库,3A算法库根据外部光照强度计算出一个Sensor曝光时间的设置值,ISP库得到这个设置值,然后通过Sensor之前注册的回调函数,把这个值设置到Sensor的硬件寄存器中去,实现整个过程。是为 ISP 配置正确的输入时序。(1)修改驱动源码(sambashar\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\sensor\ar0130)

weixin_53762042的博客 3568

ApplicationContextAware使用

问题背景 在我们的web程序中,用spring来管理各个实例(bean), 有时在程序中为了使用已被实例化的bean, 通常会用到这样的代码: ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext-common.xml"); AbcService abcService ...

rogerxue12345的博客 245

从零到一:QT for OpenHarmony 开发环境实战搭建与踩坑指南

本文是一份详尽的QT for OpenHarmony开发环境搭建实战指南。文章手把手教你如何在Windows和macOS系统上,从环境准备、核心工具(DevEco Studio与社区版QT SDK)安装配置,到创建首个QT Quick项目、解决构建部署中的常见问题,最终实现应用在OpenHarmony设备上运行。内容涵盖关键配置修改、资源管理及深度踩坑经验,旨在帮助开发者高效开启跨平台开发之旅。

weixin_29190573的博客 327

聊聊spring项目中如何动态刷新bean

1、scope get方法try {throw ex;});ex);throw ex;触发时机就是在调用getBean时触发2、scope remove方法@Overrideif (bean!= null) {触发时机实在调用destroyScopedBean方法。

♥回眸相視笑♥的博客 2403

jmeter小白下载安装步骤

本文仅仅简单介绍了jmeter工具的下载安装,以及基础的操作步骤。

昔年@曦的博客 3497

使用vcpkg快速安装opencascade并自动配置部署开发环境

广泛的开源库:vcpkg 提供了上千个流行的 C++ 开源库,用户可以通过简单的命令安装和集成这些库,包括 Boost、OpenCV、SQLite、fmt 等。确保包版本一致性:通过 vcpkg.json 文件,开发者可以指定依赖的库版本,确保项目在不同环境下的构建结果一致,避免由于依赖库版本不一致而导致的构建问题。强大的社区支持:Vcpkg 是开源项目,拥有活跃的社区和微软团队的支持,提供了稳定的更新和问题修复。快速更新:Vcpkg 社区活跃,库的更新速度较快,开发者可以迅速获得库的最新版本。

loujiand的博客 2293

服务器运行的状态,修改Spring中的applicationContext.xml配置文件

项目,需要访问多个数据库,而且需要在服务器运行不重新启动的情况下,动态的修改spring中配置的数据源datasource,在网上找了很多资料,最后找到了适合我的方法,下面总结一下。 spring的配置文件是在容器启动的时候就加载到内存中的,如果手动改了application.xml,我们必须要重新启动服务器配置文件才会生效。而在spring中提供了一个类WebApplicationCont

lhzjj的专栏 5792

STM32F103待机模式原理与低功耗实战指南

待机模式是嵌入式系统实现超低功耗的核心机制,其本质是通过切断内核域电源(VDD/VDDA)实现微安级静态电流,区别于睡眠/停止模式的状态保持特性。原理上依赖电源域隔离、WKUP引脚事件唤醒与RTC备份域协同,技术价值在于支撑电池供电设备长达数年续航。典型应用场景包括物联网传感器节点、智能电表、便携医疗设备等对功耗极度敏感的终端。工程落地需严格遵循GPIO模拟输入配置、唤醒标志清除、备份域解锁等关键步骤,避免因漏电或误唤醒导致实测电流超标。本文以STM32F103为例,深入解析待机模式的硬件基础与HAL库实现

weixin_32999557的博客 66

布尔代数基本定律全解析:从逻辑化简到工程实战

布尔代数是数字电路、程序设计与数据查询的底层数学语法,它将与、或、非三种基本运算符号化,让复杂的条件逻辑可以通过代数定律进行化简与等价变换。无论是逻辑门的优化、代码中嵌套条件重构,还是位运算技巧与数据库查询调优,其背后都依赖交换律、分配律、吸收律以及德摩根定律等核心原理。掌握这些定律,不仅能减少电路元件数量、提升代码可读性,还能高效解决诸如判断一个数是否为2的幂等经典工程问题。卡诺图作为图形化化简工具,进一步降低了多变量逻辑的复杂度。学习过程中需警惕算术语义混淆、取反符号遗漏等常见误区,并通过真值表交叉验证

weixin_33853827的博客 308

动态规划之【树形DP】第3课:树形DP应用案例实践2

动态规划之【树形DP】第3课:树形DP应用案例实践2

王老师青少年编程 767

【零基础入门unity游戏开发——3D篇】3D物理关节 —— Joint相关组件

【零基础入门unity游戏开发——3D篇】3D物理关节 —— Joint相关组件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1203

Spring常用的Listener

一.Spring中的WebAppRootListener 这个listner的作用就是监听web.xml中的配置para-name为webAppRootKey的值,比如我的web应用为tsts,那么我配置 这样一个 1.&lt;context-param&gt; 2. &lt;param-name&gt;webAppRootKey&lt;/param-name&gt; 3. &l...

peizhiinfo 103

Android系统开发面试指南:系统Launcher岗位解析

本文针对上海礼聪Android系统开发岗位(侧重系统Launcher、充电/电池/USB底层开发)提供面试指南。内容涵盖应用开发(启动流程优化)、系统底层(充电状态机、USBOTG)、编程能力(线程安全LRU实现)、问题排查(ANR分析)及沟通协作等核心考点。通过5类典型问题及技术深度解析,帮助候选人系统准备,重点考察Framework源码理解、系统调试能力和工程思维。建议结合PowerManagerService等模块源码和systrace工具进行实践准备,同时注重技术表达与协作能力的展现。

郑伟强dev的专栏 935

java -spring

1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。主要包括以下七个模块: Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务; Spring AOP:AOP服务; Spring Web:提供了基本的面向Web的综合特性,提供对常见框架如Stru

weixin_42656458的博客 224

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Quartz与Spring结合时如何动态更新Job的启动时间

转:http://www.blogjava.net/fastzch/archive/2010/04/27/189790.html   今天早上一朋友问我如何在Spring中动态更新Quartz的启动时间,我试了一把,记录如下:动态更新的Java类如下:   import org.quartz.CronTrigger; import org.quartz.JobDetail; impor...

zengenry的专栏 200

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spring学习上下文【ConfigurableApplicationContext】

继承了ApplicationContext接口,并扩展了一些额外的方法,用于允许应用程序在运行时动态地修改和管理应用上下文。ConfigurableApplicationContext接口提供了设置上下文ID、设置父应用上下文、添加监听器、刷新容器、关闭和判断是否活跃等方法。此外,ConfigurableApplicationContext还新增了两个主要方法:refresh()和close(),使得ApplicationContext具有启动、刷新和关闭的功能。

牧码人的博客 3300

计算机控制技术及应用

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

Spring cloud配置中心动态更新的原理

Spring cloud下的微服务为了能动态感知配置中心的变化,多生成了一个ApplicationContext,由于ApplicationContext聚合了Environment,所有同时也多生成了一个Environment。这个新的ApplicationContext专门用于和配置中心交互,contextId为bootstrap。

诗人不写诗 470

Spring面试题-2021最新(持续更新中)

Spring面试题1、什么是Spring1.1、Spring的优缺点1.2、Spring中有哪些功能模块1.3、Spring中用到的设计模式1.4、Spring中的事件有哪几种?2、什么是IoC?2.1、IoC的作用2.2、Spring IoC的实现机制2.3、Spring的IoC支持哪些功能?2.4、IoC的类型有哪几种?(依赖注入的类型有哪几种)3、Spring AOP4、Spring的通知有哪些类型?功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成

Allen-wan的博客 9836

《Java 100 天进阶之路》第73篇:Spring IoC容器(2026版)

Spring全家桶专题开篇之作!IoC(控制反转)是Spring最核心的基石——将对象的创建和依赖管理从代码转移到容器。一文掌握IoC与DI的关系(思想 vs 实现)、BeanFactory vs ApplicationContext(懒加载 vs 预加载)、Bean生命周期五阶段(实例化→属性填充→初始化→使用→销毁)、三种配置方式(XML/注解/Java配置)。附完整代码示例、避坑清单、面试高频考点与追问陷阱。理解了IoC容器,就理解了Spring的"心脏"!

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 8260

Spring-ApplicationContext事件机制

原文链接 ApplicationContext中事件处理是由ApplicationEvent类和ApplicationListener接口来提供的。如果一个Bean实现了ApplicationListener接口,并且已经发布到容器中去,每次ApplicationContext发布一个...

chijunmei7041的博客 149

java 动态加载配置文件_关于Spring配置文件的动态载入的修改

一、概述Spring MVC的开发是基于action-servlet.xml进行配置,但不支持开发模式下进行动态的配置文件载入。本文主要是介绍如何修改Spring的源代码,使Spring支持动态的配置文件更新,让开发变得更加简单。二、实现action-servlet.xml动态载入Spring提取配置文件的思路:每次Spring MVC会在使用前将XML文件载入内存中,并生成映射类的实例,放在Ma...

weixin_39615596的博客 498
上一篇: 自动加载缓存框架
下一篇: JAVA CAS单点登录(SSO)
杜引强
博客等级 码龄13年 806粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值