独立线程监控配置文件是否变更,适用于更新了配置文件,不需要重启tomcat服务
直接贴出来代码:
package cn.leadeon.utils.file; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties; /**
* 轮询监控配置文件是否更新,动态获取最新内容
*
* @author LiJunJun
* @date 2018.08.08
*/
public class MonitorSysPropertiesUtil
{
private static Properties SysLocalPropObject = null; // 配置文件绝对路径
private static String defaultPropFilePath = null; // 配置文件名称
private static String propertiesName = null; // 文件更新标识
protected long lastModifiedData = -1; private static MonitorSysPropertiesUtil instance; public static MonitorSysPropertiesUtil getInstance(String fileName)
{
if (propertiesName == null)
{
propertiesName = fileName;
} if (instance == null)
{
syncInit();
} return instance;
} /**
* 同步块,避免多线程调用,生成多个实例
*/
private static synchronized void syncInit()
{
if (instance == null)
{
instance = new MonitorSysPropertiesUtil();
}
} /**
* 私有构造器启动一个线程实时监控配置文件
*/
private MonitorSysPropertiesUtil()
{
SysLocalPropObject = new Properties(); ClassLoader classLoader = MonitorSysPropertiesUtil.class.getClassLoader(); defaultPropFilePath = classLoader.getResource(propertiesName).getFile(); File propertyFile = new File(defaultPropFilePath); if (propertyFile.exists())
{
reloadFile(propertyFile);
} // 循环监控配置文件的变化,一旦发现文件发生变化了则重读配置文件
Thread thread = new Thread(new monitorRunnable(defaultPropFilePath)); thread.start();
} /**
* 监控线程内部类
*
* @author LiJunJun
*/
class monitorRunnable implements Runnable
{ private String filePath; final MonitorSysPropertiesUtil self = MonitorSysPropertiesUtil.this; public monitorRunnable(String filePath)
{
this.filePath = filePath;
} @Override
public void run()
{
while (true)
{
// 间隔10分钟
try
{
Thread.sleep(1000 * 60 * 10);
// Thread.sleep(1000);
}
catch (InterruptedException e)
{
System.out.println("定时巡检配置文件线程休眠异常" + Thread.currentThread().getName());
e.printStackTrace();
} try
{
File propertyFile = new File(filePath); if (self.lastModifiedData != propertyFile.lastModified())
{
self.reloadFile(propertyFile);
self.lastModifiedData = propertyFile.lastModified();
}
}
catch (Exception e)
{
System.out.println("校验配置文件是否改变异常,MonitorSysPropertiesUtil -- monitorRunnable");
e.printStackTrace();
}
}
} } /**
* 重新加载文件
*
* @author LiJunJun 2017.08.08
* @param propertyFile 配置文件路径
*/
private void reloadFile(File propertyFile)
{
FileInputStream inputStreamLocal = null;
try
{
inputStreamLocal = new FileInputStream(propertyFile); SysLocalPropObject.load(inputStreamLocal);
}
catch (Exception e)
{
if (e instanceof FileNotFoundException)
{
SysLocalPropObject = null;
}
else
{
System.out.println("校验配置文件是否改变异常,MonitorSysPropertiesUtil -- reloadFile failed");
}
e.printStackTrace();
}
finally
{
try
{
if (inputStreamLocal != null)
{
inputStreamLocal.close();
}
}
catch (IOException e)
{
System.out.println("关闭IO流异常,MonitorSysPropertiesUtil -- reloadFile failed");
e.printStackTrace();
}
}
} /**
* 对外提供获取配置文件对象的方法
*/
public static Properties getPropertiesObject()
{
return SysLocalPropObject;
}
}
独立线程监控配置文件是否变更,适用于更新了配置文件,不需要重启tomcat服务的更多相关文章
- 【shell脚本】自动监控tomcat服务===autoCheck.sh
自动监控tomcat服务,当tommcat服务挂掉时自动重启 一.脚本内容 [root@localhost ]# cat /root/autoCheck.sh #!/bin/bash startTom ...
- Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案
注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明. Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...
- 通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。
Web Workers API - Web API 接口参考 | MDNhttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API ...
- 用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰
服务器: 1.与客户端的交流手段多是I/O流的方式 2.对接的方式是Socket套接字,套接字通过IP地址和端口号来建立连接 3.(曾经十分影响理解的点)服务器发出的输出流的所有信息都会成为客户端的输 ...
- Security基础(四):OpenSSL及证书服务常用系统监控命令、搭建nagios监控服务器、配置文件及插件使用、监控远程主机的公有数据、监控远程主机的私有数据
一.OpenSSL及证书服务常用系统监控命令 目标: 本案例要求练习常用的系统监控命令完成以下任务: 使用vmstat命令监控内存及磁盘I/O信息 使用iostat命令监控CPU处理器及磁盘的I/O信 ...
- C#新开一个线程取到数据,如何更新到主线程UI上面
一:问题 之前有被面试官问过,在WinForm中,要去网络上获取数据,由于网络环境等原因,不能很快的完成,因此会发生进程阻塞,造成主进程假死的现象,需要怎么解决? 二:思路 因此,往往是新 ...
- 浅谈线程池(中):独立线程池的作用及IO线程池
原文地址:http://blog.zhaojie.me/2009/07/thread-pool-2-dedicate-pool-and-io-pool.html 在上一篇文章中,我们简单讨论了线程池的 ...
- 多线程爬虫Java调用wget下载文件,独立线程读取输出缓冲区
写了个抓取appstore的,要抓取大量的app,本来是用httpclient,但是效果不理想,于是直接调用wget下载,但是由于标准输出.错误输出的原因会导致卡住,另外wget也会莫名的卡住. 所以 ...
- MOOS学习笔记4——独立线程不同回调
MOOS学习笔记4--独立线程不同回调 /** * @fn 独立线程不同回调 * @version v1.0 * @author */ #include "MOOS/libMOOS/Comm ...
随机推荐
- js中的class
js中的class 类写法 class SuperClass { constructor(option) { this.a = option; } fn() { console.log(this.b) ...
- Java面向对象-类与对象
Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...
- BeX5 常见问题解决办法
1.获取当前Activity的名称 Activity activity = ProcessUtils.getActivityInProcessContext(); String activityNam ...
- webrtc系列文章
WEBRTC RTP/RTCP协议族 2017-02-22 20:15 阅读(144) 评论(0) WebRTC 基于GCC的拥塞控制(下) 2017-02-22 15:44 阅读(108) 评论(0 ...
- MVC,MVP 和 MVVM 的详解
一.MVC MVC模式的意思是,软件可以分成三个部分. 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下. View 传送 ...
- The centos disc was not found in any of your drives.Please insert the centos disc and press OK to retry
查看虚拟机设置中关于CDROM的选项,将CDROM的状态改为已连接,不要奇怪,勾选上之后再按下OK就好了
- tomcat 7 7.0.73 url 参数 大括号 {} 不支持 , 7.0.67支持
7.0.73 url有JSON.stringify一个对象,然后作为参数拼接.结果请求报400错误,但是tomcat 7.0.67版本没有问题,猜测是高级版本对url参数比较严格. 处理方法: ...
- Asp.net 动态添加Meta标签
下面代码动态设置浏览器文档模式 HtmlHead head = (HtmlHead)Page.Header; HtmlMeta contentType = new HtmlMeta();//显示字符集 ...
- eclipse生成的web项目在resin服务器上的发布(不能解析web.xml)
首先报错误: web项目web.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <web-ap ...
- 【总结整理】Edraw Max亿图图示软件快捷键(转)
Edraw Max亿图图示软件快捷键大全,你想要的都在这了! 用过Edraw Max亿图图示软件的一定知道,亿图是一款功能十分强大的图形图表设计软件.无论是流程图.思维导图.组织结构图.甘特图.网 ...