正文
【非官方方式】获取Disconf动态更新的配置文件的值
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
disconf可以配置reload,当更改配置时自动刷新classpath下的配置文件。然而获取最新的值官方说明是加@DisconfFileItem注解放在属性的方法上,底层通过拦截器获取的。
但是每个属性都要定义一个属性,其实是一件很繁琐的事情。
所以,以下提供一种非官方实时获取最新值的方式。
public class PropertiesUtils {
private static final Logger logger = LoggerFactory.getLogger(PropertiesUtils.class);
private static final String charset = "UTF-8";
private static final Properties sysProp = new Properties();
private static long lastModify = 0L;
private static File system;
private PropertiesUtils() {
throw new IllegalAccessError("Utility class");
}
static {
try {
system = new ClassPathResource("system.properties").getFile();
load(system.lastModified());
} catch (Exception e) {
logger.error("properties file load error",e);
throw new RuntimeException(e);
}
} private static void load(long updateTime) {
try {
//注意清空,否则没有新值,会使用旧值
sysProp.clear();
//获取属性
sysProp.load(new InputStreamReader(new FileInputStream(system), charset));
//获取文件修改时间
lastModify = updateTime;
} catch (IOException e) {
throw new RuntimeException(e);
}
} /**获取属性配置值
* @param name 名称
* @return
*/
public static String getProp(String name) {
long modify = system.lastModified();
if (modify > lastModify) load(modify);
return sysProp.getProperty(name);
}
}
通过判断文件是否更改,从而得到最新配置的值。
这样获取配置就不需要每个都定义一个属性了。