项目需要频繁更新配置文件,每次改完需要先停tomcat,在重启很麻烦~~~

今天抽个空研究了一下,发现很多人都遇到类似的问题,然后综合了下各个网站的解决办法,我整了一个demo出来了,废话不多说先上图:

说明:配置文件第一次只有一个属性,test;待执行完后又添加一个新属性appId;

源代码如下:

package conf;import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;import org.apache.log4j.Logger;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;/*** 动态加载配置文件* @author iYjrg_xiebin* @date 2016年8月9日下午3:55:09*/
public class SysProperties implements Runnable{private static Logger log = Logger.getLogger(SysProperties.class);  private Map<String,Long> configFileModifyDate = new HashMap<String, Long>();/*** 系统配置文件,包含系统classpath目录下config*.properties中的内容,5秒钟检查一次,如果有变化自动重新加载。*/public static Map<String,String> SYSTEM_CONFIG = new ConcurrentHashMap<String,String>();//配置文件路径  private static String defaultPropFileName = "/resources";  /*** 系统配置文件监测,每5秒检测一次,如果配置文件有变化,则重新加载。*/@Overridepublic void run() {int checkDely= 5*1000 ;      // 配置文件自动检查间隔;int beginDely = 60*1000;  // 1分钟后运行配置文件自动检查功能。try {Thread.sleep(beginDely);       log.info("启动 配置文件检查 线程,当前检测频率:"+checkDely);} catch (InterruptedException e1) {e1.printStackTrace();}while(true){try {this.loadAllConfigFiles();} catch (Exception e) {e.printStackTrace();}try {Thread.currentThread();Thread.sleep(checkDely);} catch (InterruptedException e) {e.printStackTrace();}}}/*** 检查系统配置文件,并更新全局变量 。* @throws Exception * @date 2012-8-31*/private void loadAllConfigFiles(){String tempPath = this.getClass().getResource(defaultPropFileName).getFile();  File fileDir = new File(tempPath);  fileDir.listFiles(new FileFilter() {@Overridepublic boolean accept(File file) {try {String name = file.getName();String fullPath = file.getAbsolutePath();if(name.matches("^sys.*\\.properties$")){//propertiesLong value = configFileModifyDate.get(fullPath);if(value==null || value.longValue()!=file.lastModified()){log.info("加载配置文件:"+file);loadPropertieFile(file);configFileModifyDate.put(fullPath,file.lastModified());}}} catch (Exception e) {e.printStackTrace();}return false;}});}/*** 加载配置文件到SYSTEM_CONFIG* @date 2012-8-31* @param configFile 系统配置文件以 sys*.properties命名。*/private void loadPropertieFile(File configFile) {try {Properties properties = PropertiesLoaderUtils.loadProperties(new FileSystemResource(configFile));for(String key:properties.stringPropertyNames()){String value=properties.getProperty(key);log.info("load property:"+ key+"->"+value);SYSTEM_CONFIG.put(key,value);}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {SysProperties sys = new SysProperties();sys.run();}}

问题的核心在于:file.lastModified,如果当前map中存储的时间戳跟本次加载的不一致,就重新load一把;

然后哦哦~

修改配置文件不用重启tomcat相关推荐

  1. 为什么修改jsp不用重启tomcat,而修改servlet要重启tomcat

    虽然servlet和jsp本质都是servlet,运行时都是运行.class文件,但是它们的部署方式不一样. servlet是先编译后部署,修改完以后,MyEclipse进行编译,然后部署.class ...

  2. idea从零到精通(09)之修改代码无需重启Tomcat(热启动)

    文章目录 作者简介 引言 导航 热门专栏推荐 视频讲解 概述 解决方式 1.修改配置 2.以debug方式启动Tomcat 3.打开页面查看 4. 修改页面代码 5. 修改 xml 配置文件 6. 说 ...

  3. host切换工具、修改HOST不用重启IE

    host切换工具.修改HOST不用重启IE 1.分享个修改HOST不用重启IE就能立刻生效的技巧: 注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\C ...

  4. Tomcat优化设置:IDEA实现不用重启Tomcat就能自动更新资源

    对于tomcat的部署,找到edit configure 然后点deployment,点右边的+的artifacts,可以看到这两个: war 是发布模式,就是先将项目打成war包,再去部署,这个一般 ...

  5. Tomcat监控xml ,当修改xml后,不用重启tomcat

    context.xml中增加<WatchedResource>WEB-INF/web.xml</WatchedResource>,Eclipse在修改了web.xml后将自动更 ...

  6. 解决eclipse+tomcat开发时候修改配置文件自动重启服务器问题

    如图打开server.xml: 如图修改reloadable="false",禁止重启 一般在开发debug模式下都是使用可自动重启模式,这个一般设置为true.

  7. PHP 修改配置文件后重启命名

    centosPHP配置文件路径: /etc/php.ini 修改完配置文件后需要重启php服务: systemctl restart php-fpm 转载于:https://www.cnblogs.c ...

  8. linux修改时区不用重启服务,Linux修改时区不用重启的要领

    安装的虚拟机,没太留心 时区,发觉 时区比国产 上海的慢了16个小时,在网上查找了如下要领 ,共享 给大众 : --------------------------------- 时区的配置文件是/e ...

  9. 不重启修改linux时区,Linux修改时区不用重启的方法

    安装的虚拟机,没太注意时区,发现时区比中国上海的慢了16个小时,在网上查找了如下方法,分享给大家: --------------------------------- 时区的配置文件是/etc/sys ...

最新文章

  1. python计算特征的统计值并文本输出
  2. matlab怎么调用DeepLearn,使用DeepLearnToolbox-master中DBN工具箱做数据分类出现问题,求......
  3. hash tree算法
  4. composer update报错: The https://packagist.phpcomposer.com/p/xxx file could not be downloaded
  5. mysql数据备份mysqldump
  6. 一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接
  7. java.lang.NoClassDefFoundError: org/apache/shiro/authc/AuthenticationToken
  8. Linux创建swap文件
  9. php7.4报错:Trying to access array offset on value of type null
  10. 周末闲来——2048游戏开发
  11. 抖音怎么去除水印方法及小工具
  12. c语言图形界面切换,「分享」C语言如何编写图形界面
  13. Oracle EBS 值集获取段限定词SQL
  14. 译文:dBA和dBC的不同
  15. uni-app保存图片到本地相册
  16. 阿里云人工智能pai云计算平台使用方法
  17. mysql慢日志查询的阈值_mysql慢日志查询
  18. ModuleNotFoundError: No module named sklearn
  19. 洛谷P1868 饥饿的奶牛 题解
  20. 区块链杀手级应用的落地畅想(上)

热门文章

  1. Spark大数据分析与实战:基于Spark MLlib 实现音乐推荐
  2. 人力资源职位英文缩写汇总(人力资源岗位术语缩写)
  3. Scrapy框架快速执行cmd命令:‘scrapy crawl qsbk_spider’
  4. 小程序生成二维码,正方形二维码,跟小程序码
  5. js 去掉字符串最后一个逗号
  6. Ubuntu 8.04 优化设置
  7. Tomcat : 修改Tomcat端口号
  8. c语言函数指针、结构体、枚举实例(详细)解析(快速掌握)
  9. 【Python】list写入txt文件
  10. simulink模糊逻辑控制器的使用小结