如何讓.NET Core應用的配置與源文件保持同步?

来源:http://www.cnblogs.com/zyjj/archive/2017/07/10/7146103.html
-Advertisement-
Play Games

配置的同步涉及到兩個方面:第一,對原始的配置文件實施監控併在其發生變化之後從新載入配置;第二,配置重新載入之後及時通知應用程式進而使後者能夠使用最新的配置。接下來我們利用一個簡單的.NET Core控制台應用來演示針對文件的配置會涉及到數據同步的問題,我們希望應用能夠對原始配置文件實施監控,併在文件 ...


如何讓.NET Core應用的配置與源文件保持同步?_.NET_網路工程師_程式_課課家

 

  配置的同步涉及到兩個方面:第一,對原始的配置文件實施監控併在其發生變化之後從新載入配置;第二,配置重新載入之後及時通知應用程式進而使後者能夠使用最新的配置。接下來我們利用一個簡單的.NET Core控制台應用來演示針對文件的配置會涉及到數據同步的問題,我們希望應用能夠對原始配置文件實施監控,併在文件內容發生改變的時候從新載入並應用新的配置。針對JSON文件的配置源通過JsonConfigurationSource類型來表示,該類型定義在“Microsoft.Extensions.Configuration.Json”這個NuGet包中,所以我們需要在project.json文件中按照如下的形式添加針對這個NuGet包的依賴。

  1: {

  2: ...

  3: "dependencies": {

  4: ...

  5: "Microsoft.Extensions.Configuration.Json": "1.0.0"

  6: }

  7: }

  假設我們需要通過配置來當前應用使用的線程池的容量,這樣的設置需要根據當前的負載進行調整,所以需要很高的時效性,我們希望一旦修改了JSON文件的配置,應用程式中針對線程池的相關設置可以立即生效。簡單起見,我們僅僅定義MinThreads 和MaxThreads這兩個分別決定線程池容量區間的配置項,如下所示的ThreadPoolOptions是對應的Options類型。

  1: public class ThreadPoolOptions

  2: {

  3: public int MinThreads { get; set; }

  4: public int MaxThreads { get; set; }

  5:

  6: public override string ToString()

  7: {

  8: return $"Thread pool size: [{MinThreads}, {MaxThreads}]";

  9: }

  10: }

  我們在項目中添加一個名為threadPool.json的文件來定義線程池的配置。除此之外,我們需要通過修改project.json與編譯相關的配置讓該文件在編譯的時候自動拷貝到輸出目錄下(預設為bin目錄)。具體來說,我們只需要按照如下的方式將該文件的路徑設置為“builtOptions/copyToOutput”配置選購的值就可以了。

我們只需要按照如下的方式將該文件的路徑設置為“builtOptions/copyToOutput”配置選購的值就可以了。

 

  1: {

  2: ...

  3: "buildOptions": {

  4: ...

  5: "copyToOutput": "threadPool.json"

  6: }

  7: }

  接下來我們編寫瞭如下一段程式來演示應用中使用的配置如何與配置文件的內容保持同步。我們首先創建了一個ConfigurationBuilder對象,併在它上面註冊了一個JsonConfigurationSource。在創建這個JsonConfigurationSource對象的時候,除了指定配置文件(“threadPool.json”)的路徑之外,我們還將它的ReloadOnChange屬性設置為True。顧名思義,這個ReloadOnChange屬性的含義就是當原始配置文件的內容發生改變的時候是否需要重新載入配置。

 

這個ReloadOnChange屬性的含義就是當原始配置文件的內容發生改變的時候是否需要重新載入配置。

 

  在利用ConfigurationBuilder得到Configuration對象之後,我們調用它的GetReloadToken方法得到一個ChangeToken對象,後者會幫助我們判斷配置是否被重新載入。我們調用ChangeToken類型的靜態方法OnChange為這個ChangeToken對象註冊了一個回調,該回調會在配置被重新載入時自動執行。至於這個註冊的回調,我們僅僅是採用Options模式得到配置綁定生成的ThreadPoolOptions對象,並將它的相關信息列印在控制臺上。

  在這段程式的最後,我們在一個無限迴圈中以5秒鐘的間隔對threadPool.json文件進行更新。按照這段程式的意圖,當我們每次完成了針對threadPool.json的更新之後,我們創建的Configuration對象會自動重新載入。Configuration一旦重新載入,之前調用它的GetReloadToken方法得到ChangeToken對象的HasChanged屬性將變成True,註冊在它上面的回調將被執行。所以最終的結果就是重新設置的配置會實時出現在控制臺上,如下所示的輸出結果證實了這一點。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C#編寫的代碼屬於跨平臺的托管代碼,C++語言可以編寫托管(managed)和非托管(native)代碼。在C#與C++的混合編程中,經常會使用C#來調用native C++的DLL,下麵有兩種常用的調用方法供大家參考。 使用P/Invoke直接調用native C++ Dll裡面的函數。(註:此方 ...
  • 這是我在博客園的第一遍文章,想分享下lambda表達式轉換sql。喜歡EF的便捷與優雅,不喜歡生成的一坨sql。(PS:公司封裝了一套訪問資料庫的方法,所以不確定是不是EF的問題,反正就是一坨密密麻麻的的sql,我有點點處女座小糾結,雖然我是天蝎座)好了,廢話少說。 using System;usi ...
  • 一.通過導圖的方法快速去理解springmvc的原理 二.架構流程。 1、 用戶發送請求至前端控制器DispatcherServlet 2、 DispatcherServlet收到請求調用HandlerMapping處理器映射器。 3、 處理器映射器根據請求url找到具體的處理器,生成處理器對象及處 ...
  • 廢話不多說,直接上步驟。 1、文件準備 下載皮膚文件,將解壓後的Skinssk文件夾放在程式根目錄(bin\\debug)下。 皮膚文件下載地址:http://pan.baidu.com/s/1slSAqFN 2、添加工程引用 右鍵引用->點擊添加引用->瀏覽->選擇剛剛放在debug目錄下Skin ...
  • Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs與asp.net core mvc 創建一個 web api 程式 2017-5-24 8 分鐘閱讀時長 本文內容 1.Overview ...
  • 首先對 Center 進行一個簡單的佈局 然後就是在js裡面完成tabs的點擊事件實現了 其實center就是在div裡面嵌入了一個iframe,所以最後返回的就是一個iframe 這裡需要註意一點就是上面的detail是導航欄的類選擇器的值(這裡的class一定要一樣) 整個頁面代碼 ...
  • ef中,我們創建外鍵的時候需要註意,否則會出現標題所示問題。 例:有項目表,項目收藏表,用戶表 項目表有如下欄位:ProjectId,InputPersonId等 項目收藏表有如下欄位:ProjectId,UseId等 用戶表有如下欄位:用戶id等 項目表: 項目收藏表: 用戶表: 分析一下,假如刪 ...
  • 我們先來簡單瞭解一下WinForm和FarPoint,WinForm是·Net開發平臺中對Windows Form的一種稱謂。而FarPoint是一款模擬EXCEL的控制項。它可以根據用戶的要求實現很大部份的EXCEL操作,且包括多個子表、表格風格定義、公式計算、排序、分組等等都可以實現。本文主要是介 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...