资讯专栏INFORMATION COLUMN

WatchService实现配置文件变更监听

tomlingtm / 3562人阅读

摘要:实现配置文件变更监听读取的配置文件,在资源文件夹下就行监听所在目录下的文件修改删除事件启动一个线程监听内容变化,并重新载入配置设置成守护进程当服务器进程关闭时把监听线程掉

/**
 * WatchService实现配置文件变更监听
 * 
 */
public class WatchProperties {
    
    private static WatchService watchService;
    private static String filename;
    private static Properties properties;
    private static ClassPathResource resource;

    static {
        
        try {
            //读取的配置文件,在资源文件夹下就行
            filename = "sysconst.properties";
            resource = new ClassPathResource(filename);
            //监听filename所在目录下的文件修改、删除事件
            watchService = FileSystems.getDefault().newWatchService();
            Paths.get(resource.getFile().getParent()).register(watchService,
                    StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
            properties = PropertiesLoaderUtils.loadProperties(resource);
        } catch(IOException e) {
            e.printStackTrace();
        }
        
        //启动一个线程监听内容变化,并重新载入配置
        Thread watchThread = new Thread() {
            public void run() {
                while(true) {
                    try {
                        WatchKey watchKey = watchService.take();
                        for (WatchEvent event : watchKey.pollEvents()) {
                            if (Objects.equals(event.context().toString(), filename)){
                                properties = PropertiesLoaderUtils.loadProperties (resource);
                                break;
                            } 
                            watchKey.reset();
                        }
                    } catch (Exception e) {
                        
                    }
                }
            };
        };
                
        //设置成守护进程    
        watchThread.setDaemon(true);
        watchThread.start();
        
        //当服务器进程关闭时把监听线程close掉
        Runtime.getRuntime().addShutdownHook(new Thread() {
            
            @Override
            public void run() {
                try{
                    watchService.close();
                } catch(IOException e) {
                    e.printStackTrace();
                }
            }
        });
                
                
    }
    
    public static String get(String key){
        return properties.getProperty(key, "");
    }
    
    public static void main(String[] args) {
        System.out.println(">>>>>>>>>>>>>>" + get("OSS_OUT_OF_DATE"));
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69976.html

相关文章

  • Java NIO

    摘要:缓冲区的容量不可能为负值,创建后不能改变界限界限第一个不应该被读写或者写入的缓冲区位置索引。当使用从中读取数据时,的值恰好等于已经读到了多少数据。 NIO:New IO Java新IO概述 新IO采用内存映射文件的方式来处理输入/输出,新IO文件或文件的一段区域映射到内存中,这样就可以访问内存一样来访问文件了(这种方式模拟了操作系统上的虚拟内存的概念),通过这种方式来进行输入/输出比传...

    Steve_Wang_ 评论0 收藏0
  • 爬取 wallhaven图片到本地壁纸库

    摘要:项目地址,另外知乎同名文章也是我发布的,大家可以多多关注首先观察控制台其次再看本地壁纸库现在进入正题,这个小项目用到了具体版本见,另外还用到了中的线程池阻塞队列生产消费者模式文件监听服务,所以至少要求版本为或者以上项目分为个类和一个方法入 项目地址,另外知乎同名文章也是我发布的,大家可以多多关注 首先观察控制台showImg(https://segmentfault.com/img/b...

    CntChen 评论0 收藏0
  • java判断百度云分享链接是否失效

    我不知道现在有多少人在用网盘搜索引擎,但就去转盘网来说本人倾注了很多的心血,现在使用的人数也还可以,网盘资源都有个通病,那就是资源可能失效,但很多引擎都没有做失效判断,尤其是一些google自定义的引擎,技术含量不高,站长也就花心思赚钱,很少考虑用户体验。这篇文章是本人又一篇技术公开博客,之前本人已经公开了去转盘 网的几乎所有的技术细节,这一篇继续补充: 首先做个回顾:百度网盘爬虫 java分词...

    kid143 评论0 收藏0
  • java判断百度云分享链接是否失效

    我不知道现在有多少人在用网盘搜索引擎,但就去转盘网来说本人倾注了很多的心血,现在使用的人数也还可以,网盘资源都有个通病,那就是资源可能失效,但很多引擎都没有做失效判断,尤其是一些google自定义的引擎,技术含量不高,站长也就花心思赚钱,很少考虑用户体验。这篇文章是本人又一篇技术公开博客,之前本人已经公开了去转盘 网的几乎所有的技术细节,这一篇继续补充: 首先做个回顾:百度网盘爬虫 java分词...

    chanthuang 评论0 收藏0
  • 如何借助配置中心ACM加速企业IT服务快速迭代

    摘要:摘要在月日召开的第二届研发效能嘉年华中,云效邀请了阿里云产品团队的伏羿和来自阿里巴巴中间件技术部的彦林带来了如何借助配置中心加速企业服务快速迭代的主题分享。 摘要: 在5月29日召开的第二届研发效能嘉年华中,云效邀请了阿里云产品团队的伏羿和来自阿里巴巴中间件技术部的彦林带来了如何借助配置中心ACM加速企业IT服务快速迭代的主题分享。 分别对配置中心ACM和ACM技术进行了讲解,并且对A...

    李义 评论0 收藏0

发表评论

0条评论

tomlingtm

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<