【非官方方式】获取Disconf动态更新的配置文件的值

disconf可以配置reload,当更改配置时自动刷新classpath下的配置文件。然而获取最新的值官方说明是加@DisconfFileItem注解放在属性的方法上,底层通过拦截器获取的。

但是每个属性都要定义一个属性,其实是一件很繁琐的事情。

所以,以下提供一种非官方实时获取最新值的方式。

 1 public class PropertiesUtils {
 2     private static final Logger logger = LoggerFactory.getLogger(PropertiesUtils.class);
 3     private static final String charset = "UTF-8";
 4     private static final Properties sysProp = new Properties();
 5     private static long lastModify = 0L;
 6     private static File system;
 7     private PropertiesUtils() {
 8         throw new IllegalAccessError("Utility class");
 9     }
10     static {
11         try {
12             system = new ClassPathResource("system.properties").getFile();
13             load(system.lastModified());
14         } catch (Exception e) {
15             logger.error("properties file load error",e);
16             throw new VmapRuntimeException(e);
17         }
18     }
19
20     private static void load(long updateTime) {
21         try {
22             //注意清空,否则没有新值,会使用旧值
23             sysProp.clear();
24             //获取属性
25             sysProp.load(new InputStreamReader(new FileInputStream(system), charset));
26             //获取文件修改时间
27             lastModify = updateTime;
28         } catch (IOException e) {
29             throw new RuntimeException(e);
30         }
31     }
32
33
34     /**获取属性配置值
35      * @param name 名称
36      * @return
37      */
38     public static String getProp(String name) {
39         long modify = system.lastModified();
40         if (modify > lastModify) load(modify);
41         return  sysProp.getProperty(name);
42     }
43 }

这样获取配置就不需要每个都定义一个属性了。

原文地址:https://www.cnblogs.com/jay763190097/p/11760895.html

时间: 2024-07-30 23:36:14

【非官方方式】获取Disconf动态更新的配置文件的值的相关文章

spring boot 配置文件动态更新原理 以Nacos为例

配置文件的动态更新 通常获取配置文件的方式 1, @Value 2. @ConfigurationProperties(Prefix) 如果是在运行时要动态更新的话, 第一种方式要在bean上加@RefreshScope 第二种方式是自动支持的. 以Nacos为为例,我们可以看下源码是如何实现的: Nacos获取配置中心是通过单独一个线程的长轮询获取的: com.alibaba.nacos.client.config.impl.ClientWorker.LongPollingRunnable 当

定时动态更新图表

在进行实现动态更新图表时主要使用AJAX技术,主要分两种实现方法,一种是通过ASP.NET特有的AJAX控件,UpdatePanel.Timer控件+ASP.NET自带的Chart控件实现:另一种为使用第三方的图表库+JQUERY\AJAX实现. ASP.NET控件实现 实现: 前台将要定时刷新的内容放到updatePanel中即可,前台代码如下: <form id="form1" runat="server"> <asp:ScriptManage

Fragment碎片的创建和动态更新

Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块. 一,一个简单的fragment 1.创建两个局部文件,用于等待被调用 (1)left_fragment (2)right_fragment 2.分别创建两个继承于fragment类的类 (1)leftFragment(加载xml文件) public class LeftleftFragment extends Fragment { @Nullable @Override public View onCreateView(Lay

【腾讯Bugly干货分享】Android UI:机智的远程动态更新策略

Android UI:机智的远程动态更新策略 作者:王金波    腾讯Bugly特约撰稿人 1问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有未读信息提醒这样的"小红点"逻辑:一旦UI变化,"小红点"逻辑也要重新计算.如果不同的RD来维护这些代码,耦合性非常高,出错概率也很大.本文以自选股的个人页卡为例(界面如下图所

WPF柱状图(支持数据库动态更新)之组件的数据动态化

WPF柱状图(支持数据库动态更新) 在这片文章中我们介绍了如何将柱状图包装成一个组件,将这个组件的属性对外开放和组件的外部属性根内部属性绑定以及非轮询动态更新数据的方式. 非轮询更新数据感觉介绍的不够详细的请看这篇文章 WPF非轮询方式更新数据库变化SqlDependency(数据库修改前台自动更新) 然而柱状图组件讲了这么多    组件是有了   但是没有柱状图.今天去讲一下柱状图. 关于柱状图呢 我这里用的也是网上下载下来的,我们今天讲组件的数据动态化,不关注具体的柱状图怎么画,而是让当组件

UWP Windows10开发更新磁贴和动态更新磁贴

原文:UWP Windows10开发更新磁贴和动态更新磁贴 下面将介绍两种方式如何在windows10 uwp开发中如何更新应用磁贴: 实际上windows的磁贴就是用xml实现的,你只需要创建相应格式的xml就可以实现动态磁贴了 一,手动更新磁贴 二,轮询更新磁贴 [第一种方式]手动更新磁贴 创建一个文本框和一个按钮,当按钮点击时,磁贴就会显示文本框的文本 给按钮绑定一个事件,代码如下 private void changeBtn_Click(object sender, RoutedEven

Android零基础入门第44节:ListView数据动态更新

经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是静态的,但在实际开发中,这些数据往往都是动态变化的,比如数据内容发生改变.增加几行.或者删除几行,这就涉及到ListView数据的更新问题. 接下来通过一个简单的示例程序来学习ListView的数据更新. 继续使用WidgetSample工程,在app/main/res/layout/目录下创建updatedata_layout.xml文件,在其中填充如下代码片段:

JAVA代码热部署,在线不停服动态更新

本地debug的时候,可以实时编译并更新代码,线上也可以不停服来动态更新类,即所说的java热部署. JDK代理的两种方式: 1.premain方式是Java SE5开始就提供的代理方式,但其必须在命令行指定代理jar,并且代理类必须在main方法前启动,它要求开发者在应用启动前就必须确认代理的处理逻辑和参数内容等等 2.agentmain方式是JavaSE6开始提供,它可以在应用程序的VM启动后再动态添加代理的方式 agentmain应用场景: 比如正常的生产环境下,一般不会开启代理功能,但是

IOS-使用framework实现功能模块动态更新

测试Xcode版本为6.1.1 实现过程简述:把想要的作为动态更新的模块,移动到我们创建的Framework工程中,然后得到我们想要的动态库文件,把此文件再通过iTunes放到"主程序"项目的document文件夹下,从而实现从主程序中去加载此动态库,从而实现功能模块的动态更新效果.理想效果为支付宝APP,而支付宝采用的是HTML5(网页)的形式实现的,这是目前最通用的实现方式,但是不适用于复杂界面效果. 第一步:创建IOS Framework工程 第二步:生成的工程中原本的类删掉不用