日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

你可能不知道的.Net Core Configuration

發(fā)布時(shí)間:2023/12/4 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你可能不知道的.Net Core Configuration 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

執(zhí)行原理

  1. 配置讀取順序:與代碼先后順序一致。

public Startup(IHostingEnvironment env)

? ? {

? ? ? ? var builder = new ConfigurationBuilder()

? ? ? ? ? ? .SetBasePath(env.ContentRootPath)

? ? ? ? ? ? .AddJsonFile("appsettings.json", false, true)

? ? ? ? ? ? .AddJsonFile("cussettings.json", false, true);

? ? ? ? Configuration = builder.Build();

? ? }

以上代碼會(huì)先讀取appsettings.json,再讀取cussettings.json,cussettings.json的內(nèi)容會(huì)覆蓋appsettings.json的內(nèi)容。

?

  2. 覆蓋邏輯:原有的配置繼承,相同的配置覆寫,新增的配置添加。

  appsettings.json:

? ?{ ? ? ?"settings": { ? ?
? ?
"name": "AppSetting", ? ?
? ?
"age": 20 } }

  cussettings.json

? ?{ ? ? ?"settings": { ? ? ?
?
"name": "CusSetting", ? ?
? ?
"gender": "Male"} }

  結(jié)果:

  

?  

  3. 可以設(shè)置配置文件不存在或失效時(shí),程序不會(huì)被中止,該配置會(huì)被忽略。

  如cussettings.json不存在或失效時(shí):

  

?

環(huán)境變量

  1.?appsettings.{env.EnvironmentName}.json

  可以根據(jù)當(dāng)前的環(huán)境變量設(shè)置讀取對(duì)應(yīng)的配置,來覆蓋之前的配置,有點(diǎn)像Asp.Net的Web Transform,其中環(huán)境變量的key為:ASPNETCORE_ENVIRONMENT。

  可以在四個(gè)地方設(shè)置該環(huán)境變量:

  a) Visual Studio 2017中的launchSettings.json

  

  b) 操作系統(tǒng)的環(huán)境變量

  Windows:

  

?

  Linux:

  

?

  c) Dockerfile

  FROM microsoft/aspnetcore:1.1
  COPY . /app
  WORKDIR /app
  EXPOSE 5000/tcp
  ENV ASPNETCORE_URLS http://*:5000/
  ENV?ASPNETCORE_ENVIRONMENT Production
  ENTRYPOINT ["dotnet", "EnvironmentVariable.dll"]

?

  d) Docker啟動(dòng)指令

  docker run --name {name} -e?ASPNETCORE_ENVIRONMENT=Production ...

  如:

  

?

  2.?AddEnvironmentVariables()的作用

var builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath).AddJsonFile("appsettings.json", false, true).AddJsonFile($"appsettings.{env.EnvironmentName}.json", true).AddEnvironmentVariables();//作用?Configuration = builder.Build();

  a) 讀取系統(tǒng)的環(huán)境變量信息,這個(gè)應(yīng)該大部分人都知道。

  b) 覆蓋之前的配置信息。

  appsettings.json:

{
?
"settings": { ?
?
"name": "AppSetting"} }

  通過環(huán)境變量來覆蓋settings:name:

  

  

  說明:這里是用控制臺(tái)運(yùn)行,因?yàn)椴僮飨到y(tǒng)的環(huán)境變量要對(duì)IIS Express生效,要重啟vs2017,我懶!

  另外環(huán)境變量使用兩下劃線(__)作為層次的分隔符,具體可參考EnvironmentVariablesConfigurationProvider的源碼。

  

?  

Spring Cloud Config Server

  Config Server是Spring Cloud 配置管理的重要中間件,接下來,我們看一下.Net Core如何跟Config Server進(jìn)行交互。

  1. 準(zhǔn)備配置文件,這里使用Git作為配置文件的Source,地址:https://github.com/ErikXu/.NetCore-Configuration

  2. 獲取安裝包,這里使用Docker啟動(dòng),因此,是拉取官方鏡像:docker pull hyness/spring-cloud-config-server

  

  3.??準(zhǔn)備啟動(dòng)資源文件application.yml


info:??component: config service??server:??port: 8888??spring:??application:????name: git-config??profiles:????active: dev??cloud:????config:??????server:????????git:??????????uri: https://github.com/ErikXu/.NetCore-Configuration??????????searchPaths: Configs

  4. 執(zhí)行指令啟動(dòng)Config Server

  docker run --name configsvr -it -d -p 8888:8888 -v /root/config-server/application.yml:/config/application.yml hyness/spring-cloud-config-server

?

?  5. 引入Nuget包

  Install-Package Steeltoe.Extensions.Configuration.ConfigServer -Version 1.1.1

?

  6. 準(zhǔn)備appsetting.json

{

? "spring": {

? ? "application": {

? ? ? "name": "foo"

? ? },

? ? "cloud": {

? ? ? "config": {

? ? ? ? "uri": "http://192.168.52.142:8888",

? ? ? ? "validate_certificates": false,

? ? ? ? "env": "dev"?

? ? ? }

? ? }

? },

? "settings": {

? ? "name": "AppSetting"//會(huì)被Config Server的內(nèi)容覆蓋

? }

}

7. 引入Config Server

  

  結(jié)果:

  

?

掛卷Volume

  掛卷是docker的一種機(jī)制,可以把特定的目錄或者文件掛載到docker容器的指定位置。配合.Net Core Configuration的機(jī)制,可以在appsetting.json中記錄開發(fā)環(huán)境的配置,然后再指定一個(gè)待掛載的文件用于記錄不同環(huán)境的配置,從而覆蓋開發(fā)環(huán)境的配置,達(dá)到多環(huán)境適配的能力。

  1. appsetting.json


{??"settings": {????"name":?"AppSetting"??}}

  2. 指定一個(gè)待掛載的目錄,但是在開發(fā)環(huán)境不存在此文件。

public Startup(IHostingEnvironment env)

? ? {

? ? ? ? var builder = new ConfigurationBuilder()

? ? ? ? ? ? .SetBasePath(env.ContentRootPath)

? ? ? ? ? ? .AddJsonFile("appsettings.json", false, true)

? ? ? ? ? ? .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)

? ? ? ? ? ? .AddEnvironmentVariables()

? ? ? ? ? ? .AddJsonFile("/configs/volume.json", true, true); //待掛載


? ? ? ? Configuration = builder.Build();

? ? }

3. 開發(fā)環(huán)境

  

?

  4. docker啟動(dòng)指令

  docker run?--name {name} -v {source}:{target} ...

  

  注:如果有權(quán)限問題,需要先執(zhí)行setenforce 0

?

  5. 效果

  

?

?  掛卷感覺跟appsettings.{env.EnvironmentName}.json很像,既然如此,為什么還要有掛卷呢?那是因?yàn)閍ppsettings.{env.EnvironmentName}.json是.net core的機(jī)制,其它語(yǔ)言不一定會(huì)有,或者是另外的機(jī)制,docker的掛卷是服務(wù)各種語(yǔ)言的。.Net Core是很優(yōu)秀的語(yǔ)言,它接收了很多業(yè)界的需求,也響應(yīng)了docker掛卷的機(jī)制,在這一點(diǎn)上,.net的能力就相對(duì)較弱了。

  

Config Server vs Volume

  Config Server是Spring Cloud體系的配置管理中心,而Kubernetes更多是使用Volume的方式(HostPath,Config Map,Secret)。

  Config Server是運(yùn)行時(shí)的配置管理,它會(huì)定期檢測(cè)(心跳,2s)remote config的內(nèi)容,如果內(nèi)容更新,就刷新容器的配置信息。Volume是發(fā)布(更新)時(shí)的配置管理,在發(fā)布(更新)期間,就把配置信息掛載到容器中。

  Config Server要自己保證其高可用,否則,Config Server掛了,會(huì)讀取容器內(nèi)的原始配置,Volume是把文件掛載到容器中,因此無中間件高可用要求,但要利用Kubernetes等保證發(fā)布更新時(shí),配置掛載到了各個(gè)容器中。

  Config Server具有一定的語(yǔ)言侵入性(必須要有驅(qū)動(dòng)jdk或者sdk),Volume無語(yǔ)言侵入性。

  Config Server只支持Yaml等少量配置文件類型,Volume支持各種配置文件類型。

原文:http://www.cnblogs.com/Erik_Xu/p/7624323.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的你可能不知道的.Net Core Configuration的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。