最新 .net core 框架都使用json文件存贮配置参数,如果每次访问配置参数时,都去加载json文件以获取参数值,这种代码比较简单,但效率不高。
使用依赖注入的框架,系统运行时不允许重新加载配置参数。
因为上述两个原因,在系统启动时去监控配置参数的json文件,当json文件变化时,重新加载配置参数到缓存中,这样可以减少系统反复读取配置文件,并保证配置参数是最新。在框架中使用缓存保存配置参数,需要时在缓存中提取。
1 启动文件中,增加监控代码
public class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
//监控applicationconfig.json文件变化,热加载配置参数
ChangeToken.OnChange(() => App.Configuration.GetReloadToken(), () =>
{
ConfigOption.InitOptions();
});
}
}
2 系统缓存类
/// <summary>
/// 缓存配置
/// </summary>
public static class ConfigOption
{
private static AaaOptions _aaaOptions;
/// <summary>
/// Aaa配置缓存
/// </summary>
/// <returns></returns>
public static AaaOptions aaaOptions
{
get
{
if (_aaaOptions == null)
{
_aaaOptions = App.GetConfig<AaaOptions>("Aaa");
}
return _aaaOptions;
}
}
private static RunSettingsOptions _runSettingsOptions;
/// <summary>
/// 运行日志输出配置
/// </summary>
/// <returns></returns>
public static RunSettingsOptions runSettingsOptions
{
get
{
if (_runSettingsOptions == null)
{
_runSettingsOptions = App.GetConfig<RunSettingsOptions>("RunSettings");
}
return _runSettingsOptions;
}
}
/// <summary>
/// 配置缓存初始化
/// </summary>
/// <returns></returns>
public static void InitOptions()
{
_aaaOptions = App.GetConfig<AaaOptions>("Aaa");
_runSettingsOptions = App.GetConfig<RunSettingsOptions>("RunSettings");
}
}
3 使用缓存
/// <summary>
/// API接口跟踪日志输出
/// </summary>
/// <param name="log"></param>
public static void JjgLogCritical(this string log)
{
if (!ConfigOption.runSettingsOptions.JjgLogCritical) return;
log.LogCritical();
}
4 applicationconfig.json
{
"RunSettings": {
//是否是调试模式
"IsDebug": false,
//WxAPI接口跟踪日志输出
"WxLogCritical": true,
//scrm接口日志输出
"ScrmLogCritical": true,
//Jjg接口日志输出
"JjgLogCritical": false
},
"His": {
"UploadFiles": "D:\\mmc0531\\Path1\\",
"UploadSign": "D:\\mmc0531\\Path2\\",
"UploadXztys": "D:\\mmc0531\\Path3\\",
}
}