`
gaoke
  • 浏览: 86751 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

web应用中Spring ApplicationContext的动态更新

    博客分类:
  • Java
 
阅读更多

在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中ApplicationContext加载机制

    在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供了多种方式来加载 ApplicationContext。 首先,Spring 提供了两种选择来加载 ApplicationContext:ContextLoaderListener 和 ...

    Spring获取ApplicationContext对象工具类的实现方法

    值得注意的是,在Web应用中,通常推荐使用ServletContextListener来初始化ApplicationContext,并将其存储在ServletContext中供整个应用使用。这样可以更加高效和方便地管理ApplicationContext的生命周期,并且能够...

    Spring整合Jetty开发web应用的例程

    在Web应用中,Spring MVC作为其Web层的一部分,用于处理HTTP请求和响应。 2. **Jetty服务器**:Jetty是一款开源的、轻量级的HTTP服务器和Servlet容器,它快速、小巧且易于集成。Jetty不依赖于特定的Java EE容器,这...

    在Web项目中集成Spring

    在Web项目中集成Spring是一个常见的开发实践,Spring框架以其强大的依赖注入、面向切面编程以及丰富的功能模块,极大地简化了Java Web应用的开发。本文将深入探讨如何在Web项目中集成Spring,包括Spring MVC的使用、...

    spring 获得applicationcontext公用方法

    - 在Web应用中,推荐使用Servlet监听器来初始化`ApplicationContext`,以便在应用启动时加载,同时避免在多线程环境下可能出现的问题。 - 避免在不必要的情况下传播`ApplicationContext`,因为这可能导致不必要的...

    Spring源码学习七:web应用自动装配Spring配置文件1

    在Spring框架中,当我们将它应用于Web应用程序时,需要进行特殊的配置来自动加载Spring的配置文件。本文主要围绕"Spring源码学习七:web应用自动装配Spring配置文件1"这一主题,详细解析Web环境中Spring的初始化过程...

    web项目整合spring

    在IT行业中,Spring框架是Java Web开发中的一个核心组件,尤其在企业级应用中广泛使用。"web项目整合spring"这个主题,意味着我们要探讨如何将Spring框架与Web项目结合,以便实现更高效、模块化的开发流程。在这个...

    在Eclipse 中创建Spring的 Web应用.doc

    在Eclipse中创建一个基于Spring的Web应用涉及多个步骤,主要涵盖了Spring框架的Web模块、ApplicationContext的使用以及在Web容器中的配置。以下是详细的过程和相关知识点: 1. **Spring Web模块**: Spring框架...

    Spring动态加载配置文件

    在Servlet 3.0及以上版本的Web应用中,可以通过`ServletContextListener`来监听容器的生命周期事件。当`ApplicationContext`被刷新后,可以调用`ServletContext`的相关方法来更新上下文中的信息,确保整个应用都能...

    spring-web和spring-webmvc_4.2.4

    5. **ContextLoaderListener**:这是Spring Web应用的一个启动监听器,它会创建一个全局的ApplicationContext,用来管理所有Web应用范围内的bean。 接下来,我们关注`springs-webmvc`模块,它是Spring MVC的核心,...

    spring-web-5.3.6 jar包.rar

    这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类, 包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 spring的核心类,提供了核心HTTP...

    spring2.5的applicationContext配置文件

    10. **MVC配置**:对于Web应用,`applicationContext.xml`常与`servlet-context.xml`配合,定义DispatcherServlet的配置,处理HTTP请求。 以上只是`applicationContext.xml`在Spring 2.5中部分核心功能的概述。实际...

    在web项目中引入spring

    - **配置Servlet容器**: 如果是使用Servlet容器(如Tomcat),需要配置一个名为`ContextLoaderListener`的监听器,它会在Web应用启动时加载Spring的ApplicationContext。 - **创建Spring配置文件**: 创建XML或Java...

    SSH笔记-web应用下使用Spring

    在这个笔记中,我们将深入探讨如何在Web应用环境下使用Spring框架,特别是通过两种不同的方法:配置监听器类和调用HttpServlet类,以及配置ContextLoaderListener。 首先,Spring框架在Web应用中的主要作用是提供...

    Java Web项目加入Spring框架

    你需要在`src/main/webapp/WEB-INF`下创建`web.xml`文件,这是Web应用的部署描述符。 2. **配置Spring**:在`web.xml`中配置Spring的DispatcherServlet,这是Spring MVC的前端控制器,负责接收HTTP请求并分发到相应...

    Spring基于Spring框架的Web应用演示(附带cglib工具进行动态代理)

    在本教程中,我们将深入探讨如何使用Spring框架构建一个Web应用程序,并特别关注Spring中的动态代理技术,即CGlib。Spring是Java开发中最流行的框架之一,它提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,...

    Spring Webscripts Reference Documentation

    在Spring框架中,Webscripts主要用于构建可复用、可维护的Web应用逻辑。它们将业务逻辑、数据处理和视图渲染整合在一起,形成一个独立的单元,可以方便地进行部署和管理。通过使用Spring Webscripts,开发者能够更...

    加载spring 文件,在web.xml中的配置

    `&lt;listener&gt;`标签中的`&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;`定义了一个监听器,它会在Web应用启动时自动加载默认的Spring配置文件,即`/WEB-INF/...

    spring4的所有jar包+applicationContext.xml+web.xml

    此外,还可以配置Spring的ContextLoaderListener,该监听器会加载`applicationContext.xml`,使得Spring的IoC容器能够在Web应用启动时初始化。 4. **Spring4的新特性**: - **Java配置**:Spring4增强了对Java配置...

    spring webflow的一个例子

    Spring WebFlow 是一个用于构建高度交互式和流程导向型Web应用程序的框架,它扩展了Spring MVC的功能,专注于管理用户交互的流程。这个例子中的"CartApp3"很可能是一个基于Spring WebFlow实现的购物车应用程序。 在...

Global site tag (gtag.js) - Google Analytics