任務14:配置的熱更新

 

熱更新,默認是不支持的。git

網站正在運行,在不關掉網站的狀況,修改了配置文件appsettings.json文件。當用戶下一次請求的時候,直接拿到咱們的配置信息github

這個跟咱們在asp.net裏面的config不同,咱們在更改web.config的內容後,站點會自動重啓,從新加載。web

這個熱更新就是之後咱們在修改了配置文件後,不會影響用戶的訪問。這是Configuration改進的比較有用的一個地方json

咱們只須要更改這一個地方IOptions修改成IOptionsSnapshotmvc

當你用到這種及時更新的配置信息就用IOptionsSnapshotapp

 

修改了配置信息後,咱們只須要刷新頁面就能夠了asp.net

 

實現的原理ide

在咱們以前的項目裏 ,這裏的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);

            var configuration = builder.Build();

            Console.WriteLine($"ClassNo:{configuration["ClassNo"]}");
            Console.WriteLine($"ClassDesc:{configuration["ClassDesc"]}");

            Console.WriteLine("Students");

            Console.Write(configuration["Students:0:name"]);
            Console.WriteLine(configuration["Students:0:age"]);

            Console.Write(configuration["Students:1:name"]);
            Console.WriteLine(configuration["Students:1:age"]);

            Console.Write(configuration["Students:2:name"]);
            Console.WriteLine(configuration["Students:2:age"]);


            Console.ReadLine();

        }
    }
}
Program.cs

 

 

{
  "ClassNo": "1",
  "ClassDesc": "ASP.NET Core 101",

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

 

 

 可是在咱們的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方法,把默認的覆蓋掉。取消掉了熱更新。這樣咱們的熱更新就取消掉了。

相關文章
相關標籤/搜索