• 任务14:配置的热更新


        <div id="post_detail">
    

    任务14:配置的热更新

    热更新,默认是不支持的。

    网站正在运行,在不关掉网站的情况,修改了配置文件appsettings.json文件。当用户下一次请求的时候,直接拿到我们的配置信息

    这个跟我们在asp.net里面的config不一样,我们在更改web.config的内容后,站点会自动重启,重新加载。

    这个热更新就是以后我们在修改了配置文件后,不会影响用户的访问。这是Configuration改进的比较有用的一个地方

    我们只需要更改这一个地方IOptions修改为IOptionsSnapshot

    当你用到这种及时更新的配置信息就用IOptionsSnapshot

     

    修改了配置信息后,我们只需要刷新页面就可以了

    实现的原理

    在我们之前的项目里 ,这里的AddJsonFile方法有另外两个参数

    参数2:是否可选,当这个存文件不存在的时候,是否会抛出异常。这里我们设置为fasle

    参数3:reloadOnChange设置为true的话,当这个文件发生改变。就会重新加载这个文件。

    复制代码
    using System;
    using Microsoft.Extensions.Configuration;
    

    namespace JsonConfig
    {
    class Program
    {
    static void Main(string[] args)
    {
    var builder = new ConfigurationBuilder()
    .AddJsonFile(
    "class.json",false,true);

            </span><span style="color: #0000ff;">var</span> configuration =<span style="color: #000000;"> builder.Build();
    
            Console.WriteLine($</span><span style="color: #800000;">"</span><span style="color: #800000;">ClassNo:{configuration[</span><span style="color: #800000;">"</span>ClassNo<span style="color: #800000;">"</span><span style="color: #800000;">]}</span><span style="color: #800000;">"</span><span style="color: #000000;">);
            Console.WriteLine($</span><span style="color: #800000;">"</span><span style="color: #800000;">ClassDesc:{configuration[</span><span style="color: #800000;">"</span>ClassDesc<span style="color: #800000;">"</span><span style="color: #800000;">]}</span><span style="color: #800000;">"</span><span style="color: #000000;">);
    
            Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">Students</span><span style="color: #800000;">"</span><span style="color: #000000;">);
    
            Console.Write(configuration[</span><span style="color: #800000;">"</span><span style="color: #800000;">Students:0:name</span><span style="color: #800000;">"</span><span style="color: #000000;">]);
            Console.WriteLine(configuration[</span><span style="color: #800000;">"</span><span style="color: #800000;">Students:0:age</span><span style="color: #800000;">"</span><span style="color: #000000;">]);
    
            Console.Write(configuration[</span><span style="color: #800000;">"</span><span style="color: #800000;">Students:1:name</span><span style="color: #800000;">"</span><span style="color: #000000;">]);
            Console.WriteLine(configuration[</span><span style="color: #800000;">"</span><span style="color: #800000;">Students:1:age</span><span style="color: #800000;">"</span><span style="color: #000000;">]);
    
            Console.Write(configuration[</span><span style="color: #800000;">"</span><span style="color: #800000;">Students:2:name</span><span style="color: #800000;">"</span><span style="color: #000000;">]);
            Console.WriteLine(configuration[</span><span style="color: #800000;">"</span><span style="color: #800000;">Students:2:age</span><span style="color: #800000;">"</span><span style="color: #000000;">]);
    
    
            Console.ReadLine();
    
        }
    }
    

    }

    复制代码
    复制代码
    {
      "ClassNo": "1",
      "ClassDesc": "ASP.NET Core 101",
    

    "Students": [
    {
    "name": "jesse",
    "age": "13"
    },
    {
    "name": "jim",
    "age": "18"
    },
    {
    "name": "lisa",
    "age": "22"
    }
    ]
    }

    复制代码

     但是在我们的asp.net core mvc中并没有看到我们去加reloadOnChange这个动作。

    core mvc中是通过这里的 CreateDefaultBuilder 来帮我们完成的这一系列的操作。

     

     分析githb上的WebHost的源代码

    https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs

    在CreateDefaultBuilder方法里面默认reloadOnChage设置为了true。这就是为什么我们core mvc项目里面没有做任何操作,这里就已经可以热更新。

    ConfigureAppConfiguration是上面的 WebHostBuilder 的一个扩展函数

    我们可以在这里调用ConfigureAppConfiguration方法,把默认的覆盖掉。取消掉了热更新。这样我们的热更新就取消掉了。



    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    225. Implement Stack using Queues
    232. Implement Queue using Stacks
    LeetCode 763 划分字母区间
    CentOS7+eDEX-UI打造属于你的极客桌面
    好玩又有趣的linux终端命令
    Linux 应急响应入门——入侵排查
    active_anon/inactive_anon
    Red Hat 平台的推荐交换大小是多少?
    为什么RHEL系统使用交换空间而不是释放缓存和缓冲内存?
    RHEL 交换内存(Swap)使用率为 100%
  • 原文地址:https://www.cnblogs.com/owenzh/p/11304118.html
Copyright © 2020-2023  润新知