独立线程监控配置文件是否变更,适用于更新了配置文件,不需要重启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 ...
随机推荐
- Java-Maven-Runoob:Maven 项目文档
ylbtech-Java-Maven-Runoob:Maven 项目文档 1.返回顶部 1. Maven 项目文档 本章节我们主要学习如何创建 Maven 项目文档. 比如我们在 C:/MVN 目录下 ...
- 文件操作open,r,w,a三种模式
对文件操作的流程: 1.打开文件,得到文件句柄并赋值给一个变量: 2.通过句柄对文件进行操作 3.关闭文件 open("文件名"),默认为只读打开,如果你打开文件,不指定编码集,那 ...
- Unity3D的坑系列:你真想发布WinPhone版吗?
Unity 4.2加入了支持WinPhone发布,本来是一件令人开心的事情,不过最近听了Unity技术支持的一个事情后就发现,原来发布WinPhone版也是一个坑. 实际上如果你用Unity做小游戏发 ...
- 4.solr学习速成之bean
以bean的形式提交索引,以bean的形式查询出来 package com.liucheng.solr; import java.io.Serializable; import org.apache. ...
- Windows下安装配置免安装MySQL5.7服务器
Windows下安装配置免安装MySQL5.7服务器 1.下载.解压安装包 从MySQL官方网站上下载mysql-5.7.19-winx64.zip 下载完成后,把安装包解压到D:\DevSoft ...
- python asyncio 异步实现mongodb数据转xls文件
from pymongo import MongoClient import asyncio import xlwt import json class Mongodb_Transfer_Excel( ...
- java基础之集合长度可变的实现原理
首先我们要明白java中的集合Collection,List,ArrayList之间的关系: ArrayList是具体的实现类,实现了List接口 List是接口,继承了Collection接口 Li ...
- 用eclipse+svn插件,上传新项目到svn服务器
给定trunk路径,https://svn.ws.125089.com/public/nlp/3434index/IndexByModelSolr/trunk/. 其中自己的web项目名字是Index ...
- ubuntu下不用eclipse开发cocos2d-x(命令行)
之前在ubuntu下通过eclipse搭建开发cocos2d-x的环境,但是由于eclipse界面在ubuntu显得很丑,在里面写代码,完全没有感觉,后来我转到了win7上通过vs2010和eclip ...
- 2-配置Andriod环境时的错误。。。Theme.AppCompat.Light
编译或运行时可能会出现错误: Error:Error retrieving parent for item: No resource found that matches the given name ...