10 | 环境变量配置提供程序:容器环境下配置注入的最佳途径

环境变量的配置提供程序主要适应场景:

1、在 Docker 中运行时

2、在 Kubernetes 中运行时

3、需要设置 ASP.NET Core 的一些内置特殊配置时

环境变量和命令行这两个提供程序在早期是没有容器化的,当时一个操作系统会跑多个应用程序,应用程序注入配置的方式一般都是通过文件或者是命令行的方式来注入的,环境变量当时用的比较少

现在在容器化的环境下,有了 Docker 的隔离能力,就意味着每一个应用程序都相当于跑在一个小型的操作系统下面一样,所以说这个时候 Docker 提供的环境隔离能力让我们可以使用环境变量来配置应用程序,在 Docker 和 Kubernetes 中,会大量使用环境变量,而不是使用命令行来配置基础配置

环境变量的配置有如下特点:

1、对于配置的分层键,支持使用双下横线 "__" 代替 ":"

2、支持根据前缀加载

在某些操作系统,比如说 Linux 下面,冒号作为环境变量的 Key 值是不行的,所以说这里支持用双下划线来代替冒号,也就是说当遇到双下划线的环境变量时,可以认为这是一个分层键

环境变量提供程序还支持根据环境变量的前缀来加载

接下来时代码演示

首先引入三个包

  • Microsoft.Extensions.Configuration.Abstractions
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.EnvironmentVariables

然后看一下环境变量如何在调试环境下注入

右键项目,属性,调试,环境变量

同样的在 Properties 下的 launchSettings.json 可以看到配置

{
"profiles": {
"ConfigurationEnvironmentVariablesDemo": {
"commandName": "Project",
"environmentVariables": {
"KEY1": "value1",
"KEY2": "value2",
"SECTION1__KEY3": "value3",
"SECTION1__SECTION2__KEY4": "value4",
"XIAO_KEY1": "xiao key1"
}
}
}
}

主程序

namespace ConfigurationEnvironmentVariablesDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables(); var configurationRoot = builder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}");
}
}
}

启动程序,输出如下:

key1:value1

分层键

// "SECTION1__KEY3": "value3"
// 我们定义了一个分层键 SECTION1,用双下划线隔开,这个 section 下面有一个 KEY3 的 Key
var section = configurationRoot.GetSection("SECTION1");
Console.WriteLine($"KEY3:{section["KEY3"]}");

启动程序,输出如下:

KEY3:value3

多级分层键

// "SECTION1__SECTION2__KEY4": "value4"
var section2 = configurationRoot.GetSection("SECTION1:SECTION2");
Console.WriteLine($"KEY4:{section2["KEY4"]}");

启动程序,输出如下:

KEY4:value4

前缀过滤:是指在注入环境变量的时候,指定一个前缀,意味着只注入指定前缀的环境变量,而不是把整个操作系统的所有环境变量注入进去

// "XIAO_KEY1": "xiao key1"
// build 之后把读取到的环境变量的前缀去掉
builder.AddEnvironmentVariables("XIAO_");
var configurationRoot = builder.Build();
Console.WriteLine($"KEY1:{configurationRoot["KEY1"]}");
// "KEY2": "value2"
// 在注入的时候,凡是没有 XIAO_ 开头的 Key 都没有注入进来,仅注册进来需要的一个环境变量值
// 适合当需要加载特定的值,去掉系统其他值的干扰项的场景使用
Console.WriteLine($"KEY2:{configurationRoot["KEY2"]}");

启动程序,输出如下:

KEY1:xiao key1
KEY2:value2

GitHub源码链接:

https://github.com/MingsonZheng/DotNetCoreDevelopmentActualCombat/tree/main/ConfigurationEnvironmentVariablesDemo

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记的更多相关文章

  1. Windows 10 Java环境变量配置

    Win10下 Java环境变量配置 首先,你应该已经安装了 Java 的 JDK 了(如果没有安装JDK,请跳转到此网址:http://www.oracle.com/technetwork/java/ ...

  2. Unity3D 开发 之 JDK安装与环境变量配置

     安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目录 ...

  3. 《Flask Web开发实战:入门、进阶与原理解析》 学习笔记

    一个视图函数可以绑定多个 URL 为了让互联网上的人都可以访问,需要安装程序的服务器有公网ip 如果过度使用扩展,在不需要 的地方引人,那么相应也会导致代码不容易维护 ,应该尽量从实际需求出发,只在需 ...

  4. .NET Core开发实战(第11课:文件配置提供程序)--学习笔记

    11 | 文件配置提供程序:自由选择配置的格式 文件配置提供程序 Microsoft.Extensions.Configuration.Ini Microsoft.Extensions.Configu ...

  5. ASP.NET Core - 配置系统之配置提供程序

    3. 配置提供程序 上面提到,通过 IConfigurationBuilder 的实现类对象,我们可以自由地往配置系统中添加不同的配置提供程序,从而获取不同来源的配置信息..NET Core 中,微软 ...

  6. Java环境变量配置教程

    Windows 10  Java环境变量配置教程 目前Windows 10系统已经很成熟,大多数人开发都在Windows 10系统下进行开发,于是乎我做一下Java环境变量在Windows 10配下的 ...

  7. 2月送书福利:ASP.NET Core开发实战

    大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...

  8. [ASP.NET Core开发实战]基础篇06 配置

    配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...

  9. Mac下JDK、Maven、Tomcat、Git开发安装及环境变量配置

    本文主要内容: - 1.Mac OS 10.11.6 [OS X EL Captain] - 2.Mac OS 安装Java 设置环境变量 - 3.Mac OS 安装Maven设置环境变量 - 4.M ...

  10. 【Spring】使用@Profile注解实现开发、测试和生产环境的配置和切换,看完这篇我彻底会了!!

    写在前面 在实际的企业开发环境中,往往都会将环境分为:开发环境.测试环境和生产环境,而每个环境基本上都是互相隔离的,也就是说,开发环境.测试环境和生产环境是互不相通的.在以前的开发过程中,如果开发人员 ...

随机推荐

  1. freeswitch号码变化方案

    概述 freeswitch是一款简单易用的开源音视频软交换平台. 在生产环境中,由于各个线路的号码规则并不统一,经常需要针对中继线路做号码变换的方案. 本文主要介绍fs中有哪些可选的号码变换方案. 环 ...

  2. df -h与df -i的区别

    一. df命令详解: linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息 -a 全部文件系统列表 -h ...

  3. wireshark 抓包使用

    本文为博主原创,转载请注明出处: 在项目开发过程当中,尤其在联调和测试功能的使用,经常会用到抓包,用抓包进行问题的定位. 所以记录一下wireshark的使用,如何抓包,分析,保存等. wiresha ...

  4. Redis服务端辅助的客户端缓存机制

    一.背景和问题 二.Redis6 的解决方案及原理 2.1 服务端支持客户端缓存的两种模式 1. 默认模式 2. 广播模式 2.2 客户端实现的两种连接模式 1. 使用同一连接 2. 使用不同连接 3 ...

  5. 【TouchGFX】屏幕概念

    Screen构成 界面布局 View, 逻辑处理 Presenter Currently Active Screen 因TouchGFX分配内存的的方式是,按照最大的Screen分配,即最大View+ ...

  6. 2023年江苏“领航杯”MISC一个很有意思的题目(别把鸡蛋放在同一个篮子里面)

    别把鸡蛋放在同一个篮子里面 题目附件:https://wwzl.lanzoue.com/i6HmX16finnc 1.题目信息 解压压缩包打开附件,获得5141个txt文档,每个文档都有内容,发现是b ...

  7. Kubeadm 安装支持IPV6 K8S1.28.x的简单过程

    Kubeadm 安装支持IPV6 K8S的简单过程 背景 手贱 找了一个晚上想尝试安装一个K8S集群 并且可以支持IPV6 协议栈的 然后就开始各种百度. 各种处理 找到了一堆歪门邪道. 但是还不知道 ...

  8. SQLServer备份恢复的总结-同名恢复与异名恢复

    SQLServer备份恢复的总结 前言 GUI 搞一把. 命令行太多了也没人看 自己还能省点心 备份 备份数据库建议一定要选择: 备份选项中的 压缩->压缩备份 历史经验一个7.6G的数据库能够 ...

  9. [转帖]062、监控指标之PD

    PD相关 Grafana 监控 PD -> PD Dashboard 是否存在异常状态的TiKV Grafana 监控 PD -> Region health 大表清理后,出现了大量的空r ...

  10. [转帖] Jmeter学习笔记(七)——监听器元件之察看结果树

    https://www.cnblogs.com/pachongshangdexuebi/p/11507289.html 在jmeter中,如果我们需要查看请求结果就需要添加查看结果树,这个监听器元件有 ...