当WEB应用在运行时,修改一个类只需将class文件替换就可以。
但对于XML配置文件(如spring/struts的配置),由于不是动态加载,通常的方法是重新启动应用。由于应用在调整,配置文件变新会比较频繁,这样重启对于正式上线的网站是很难接受的。
在网上搜了很久也没找到好的办法,不知大家有何建议?

解决方案 »

  1.   

    是上线后的业务调整,我们公司自己用的。
    由于做的网站不是企业应用,因此内容的调整自然比较频繁,比如新开一个区块。
    我们采用SSH,很多业务配置都是在XML配置文件里,但又不想经常重启应用,不知大家有什么建议?
      

  2.   

    修改Spring的源代码在getBean方法里增加对文件时间戳的判断如果发现时间戳晚与先前保存的则重新读取文件一次
      

  3.   

    zqpsswh说的确实是一种思路,能否借用Class自动更新加载的方式来更新加载配置?
    如web.xml就好像是修改后自动重新加载的,不知它是怎么做的。对于chszs说的定时重启服务,个人以为对应用的影响太大,特别当网站访问量比较大后,十天一次的重启都会导致很大影响。
      

  4.   

    之前用XML配置时觉得修改需要重启服务很不可思议,一直认为有更好的解决方法,但现在看来大家都这样做。郁闷~
      

  5.   

    修改Spring的源代码在getBean方法里增加对文件时间戳的判断如果发现时间戳晚与先前保存的则重新读取文件一次
    ...
    这个如何?不过感觉怪难的
      

  6.   

    Spring的源代码修改实现起来是有些麻烦,不确定bean在哪个配置文件,只能检查所有配置或定时检查。bean有些是以单例模式运行的,也就是bean的实例已经存在并有可能正被使用。如果检查到变更了,不能只是重读某个文件,而需要new一个ContextLoader来替换,如果原先还有quartz等定时任务在运行就可能出现同时运行两个任务。调试中这个过程极易出错。另外,struts及其它框架加载XML也不是动态的,总不能一一改每个框架吧,最好有基于web容器的动态加载,不过想想确实不太可能。
      

  7.   

    java里面应该是起个线程去查文件更新时间,或者前端界面提供一个按纽去触发c里面一般直接给进程发一个信号,让他去重新读配置文件