.net core 热更新(二)配置文件热更新

最新 .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\\",
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值