开发者社区> 问答> 正文

J2EE项目配置文件自动更新:报错

我现在有个简单的需求:web项目里有个action,需要读取最新的一个xml配置文件,如果每次请求都读取一次,效率非常低,所以希望该xml配置文件数据在一个“全局空间”里,并且如果文件更新则自动更新“全局空间”里的xml数据,不能重启Tomcat服务器,大家有没有什么好想法或建议,多多交流!

展开
收起
kun坤 2020-06-07 16:12:57 506 0
1 条回答
写回答
取消 提交回答
  • 服务器起来的时候放在内存里 ,  每次需要是根据  lastModified 判断文件是否有更新 如果有 重新读取 ######你能不能具体讲述一下,我还是不懂呀!######

    没人回啊,算了,我自己回!
    现在一般有两种方法,一种是每隔一定的时间轮询检查文件是否修改过;另一种是使用操作系统提供的api,当有文件改变时通知上层应用。
    第一种方法的代表有:
    1.Apache 的vfs
    http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs2/impl/DefaultFileMonitor.html

    默认每隔1s检查,见文档:The DefaultFileMonitor is a Thread based polling file system monitor with a 1 second delay.
    2.一个国外人写的
    FileMonitor
    http://geosoft.no/software/filemonitor/FileMonitor.java.html
    3.还有一个是采用J2EE的listener实现的,不过使用定时器


    第二种方法的代表有:

    1.JDK7原生的WatchService,见http://www.codeproject.com/Articles/238780/Java-7-listen-for-file-directory-change
    2. JNotify,见http://jnotify.sourceforge.net/sample.html

    还有一个是JPoller,没研究,见:http://jpoller.sourceforge.net/



    ######这我很清楚,你还可以看看JPathWatch,也是类似的做法。但你实际用,这些wrapper有很多缺陷,比如没有类似BeginWrite EndWrite的事件,比如经常会出现重复和错误的事件等等###### @浪客Dandy : JNotify对于Linux封转了INotify,在Windows、Mac OS封装了其他系统底层的API######JNotify支持的事件太少,建议你用INotify Tools######

    lastModified

    可参见oschina 的敏感字词库管理类

    ###### @iman007 : 不是轮询,是每次请求时检查。不过找到你需要的就OK了,呵呵。######我希望做的是服务器运行过程中,替换一个配置文件能自动更新服务器中的相关参数,如果使用轮询定时检查lastModified有些效率低,希望服务器能自动检测到文件改变然后重新读取文件。 JNotify应该还可以!
    2020-06-07 16:13:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载