博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web应用中Spring ApplicationContext的动态更新
阅读量:5032 次
发布时间:2019-06-12

本文共 2182 字,大约阅读时间需要 7 分钟。

在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文件位置:

classpath:config.properties
file:/${user.home}/config.properties

 

  如果没有用户目录下的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文件中增加一个上下文变量的赋值:
parentContextKey
mycontext

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

services-context.xml
< /bean>

 

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

示例的完整代码,见svn:

转载于:https://www.cnblogs.com/duyinqiang/p/5696262.html

你可能感兴趣的文章
课堂作业01--架构师的职责
查看>>
iOS计算富文本(NSMutableAttributedString)高度
查看>>
2017/09/15 ( 框架2)
查看>>
Centos下源码安装git
查看>>
gulp-rev-append md5版本号
查看>>
IO流之File类
查看>>
sql 基础语句
查看>>
CF717A Festival Organization(第一类斯特林数,斐波那契数列)
查看>>
oracle直接读写ms sqlserver数据库(二)配置透明网关
查看>>
控件发布:div2dropdownlist(div模拟dropdownlist控件)
查看>>
Oracle composite index column ordering
查看>>
ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表
查看>>
kaggle竞赛
查看>>
区块链入门教程
查看>>
域 搭建OU 组织单元
查看>>
npm常用命令
查看>>
南海区行政审批管理系统接口规范v0.3(规划)4.2.【queryExpireList】当天到期业务查询...
查看>>
[置顶] 细说Cookies
查看>>
[wp7软件]wp7~~新闻资讯,阅读软件下载大全! 集合贴~~~
查看>>
生成指定位数随机数的方法
查看>>