需求描述:想实现一个配置文件自动加载的功能
具体的说:WEB-INF/classes/ip.properties这个是项目的一个配置文件,里面存储的是用户名和ip地址的白名单。项目在启动的时候,会加载这个配置文件。假如要改变配置文件的内容,就只能是修改配置文件,然后重启服务器。
我想做的是:提供一个http调用接口,我们在线下,手动的调用这个接口,把新的文件内容传递到服务器,然后重写服务器上的配置文件,并且把文件内容重新加载。但是,不用重启tomcat。实现细节:
读取配置文件以后会保存到一个static的map里面,还提供了一个static的refresh方法,重新读取硬盘上的文件,刷新map的内容。
遇见的问题:
如果tomcat的server.xml里面reloadable设置为true,文件可以重写,加载到内存的方法也执行,但是会导致tomcat的重启
如果tomcat的server.xml里面reloadable设置为false,文件可以重写,加载到内存的方法也执行,但是数据并没有刷新。
reloadable设置为true的情况下,tomcat会监控WEB-INF/classes这个目录下面的所有文件,因此导致重启。
reloadable设置为false的情况下,为什么没有加载起来,这是最令人费解的!敢问诸位大神是什么原因?
tomcatreload

解决方案 »

  1.   

    已经找到原因了我之前的处理是:controller收到数据以后,首先把数据写到文件,然后读取文件的内容到内存,但是,文件写成功了,读到的却是老数据,说明tomcat会把web应用下面的配置文件缓存起来,而不是每次都从硬盘读取。现在的处理是:controller收到数据以后,首先把数据写到文件,然后把数据写到内存,这样就可以了。 ps:线上环境的reload应该都设置为false。