修改配置文件不用重启tomcat
项目需要频繁更新配置文件,每次改完需要先停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相关推荐
- 为什么修改jsp不用重启tomcat,而修改servlet要重启tomcat
虽然servlet和jsp本质都是servlet,运行时都是运行.class文件,但是它们的部署方式不一样. servlet是先编译后部署,修改完以后,MyEclipse进行编译,然后部署.class ...
- idea从零到精通(09)之修改代码无需重启Tomcat(热启动)
文章目录 作者简介 引言 导航 热门专栏推荐 视频讲解 概述 解决方式 1.修改配置 2.以debug方式启动Tomcat 3.打开页面查看 4. 修改页面代码 5. 修改 xml 配置文件 6. 说 ...
- host切换工具、修改HOST不用重启IE
host切换工具.修改HOST不用重启IE 1.分享个修改HOST不用重启IE就能立刻生效的技巧: 注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\C ...
- Tomcat优化设置:IDEA实现不用重启Tomcat就能自动更新资源
对于tomcat的部署,找到edit configure 然后点deployment,点右边的+的artifacts,可以看到这两个: war 是发布模式,就是先将项目打成war包,再去部署,这个一般 ...
- Tomcat监控xml ,当修改xml后,不用重启tomcat
context.xml中增加<WatchedResource>WEB-INF/web.xml</WatchedResource>,Eclipse在修改了web.xml后将自动更 ...
- 解决eclipse+tomcat开发时候修改配置文件自动重启服务器问题
如图打开server.xml: 如图修改reloadable="false",禁止重启 一般在开发debug模式下都是使用可自动重启模式,这个一般设置为true.
- PHP 修改配置文件后重启命名
centosPHP配置文件路径: /etc/php.ini 修改完配置文件后需要重启php服务: systemctl restart php-fpm 转载于:https://www.cnblogs.c ...
- linux修改时区不用重启服务,Linux修改时区不用重启的要领
安装的虚拟机,没太留心 时区,发觉 时区比国产 上海的慢了16个小时,在网上查找了如下要领 ,共享 给大众 : --------------------------------- 时区的配置文件是/e ...
- 不重启修改linux时区,Linux修改时区不用重启的方法
安装的虚拟机,没太注意时区,发现时区比中国上海的慢了16个小时,在网上查找了如下方法,分享给大家: --------------------------------- 时区的配置文件是/etc/sys ...
最新文章
- python计算特征的统计值并文本输出
- matlab怎么调用DeepLearn,使用DeepLearnToolbox-master中DBN工具箱做数据分类出现问题,求......
- hash tree算法
- composer update报错: The https://packagist.phpcomposer.com/p/xxx file could not be downloaded
- mysql数据备份mysqldump
- 一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接
- java.lang.NoClassDefFoundError: org/apache/shiro/authc/AuthenticationToken
- Linux创建swap文件
- php7.4报错:Trying to access array offset on value of type null
- 周末闲来——2048游戏开发
- 抖音怎么去除水印方法及小工具
- c语言图形界面切换,「分享」C语言如何编写图形界面
- Oracle EBS 值集获取段限定词SQL
- 译文:dBA和dBC的不同
- uni-app保存图片到本地相册
- 阿里云人工智能pai云计算平台使用方法
- mysql慢日志查询的阈值_mysql慢日志查询
- ModuleNotFoundError: No module named sklearn
- 洛谷P1868 饥饿的奶牛 题解
- 区块链杀手级应用的落地畅想(上)