.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记
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源码链接:



本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记的更多相关文章
- Windows 10 Java环境变量配置
Win10下 Java环境变量配置 首先,你应该已经安装了 Java 的 JDK 了(如果没有安装JDK,请跳转到此网址:http://www.oracle.com/technetwork/java/ ...
- Unity3D 开发 之 JDK安装与环境变量配置
安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目录 ...
- 《Flask Web开发实战:入门、进阶与原理解析》 学习笔记
一个视图函数可以绑定多个 URL 为了让互联网上的人都可以访问,需要安装程序的服务器有公网ip 如果过度使用扩展,在不需要 的地方引人,那么相应也会导致代码不容易维护 ,应该尽量从实际需求出发,只在需 ...
- .NET Core开发实战(第11课:文件配置提供程序)--学习笔记
11 | 文件配置提供程序:自由选择配置的格式 文件配置提供程序 Microsoft.Extensions.Configuration.Ini Microsoft.Extensions.Configu ...
- ASP.NET Core - 配置系统之配置提供程序
3. 配置提供程序 上面提到,通过 IConfigurationBuilder 的实现类对象,我们可以自由地往配置系统中添加不同的配置提供程序,从而获取不同来源的配置信息..NET Core 中,微软 ...
- Java环境变量配置教程
Windows 10 Java环境变量配置教程 目前Windows 10系统已经很成熟,大多数人开发都在Windows 10系统下进行开发,于是乎我做一下Java环境变量在Windows 10配下的 ...
- 2月送书福利:ASP.NET Core开发实战
大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...
- [ASP.NET Core开发实战]基础篇06 配置
配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...
- 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 ...
- 【Spring】使用@Profile注解实现开发、测试和生产环境的配置和切换,看完这篇我彻底会了!!
写在前面 在实际的企业开发环境中,往往都会将环境分为:开发环境.测试环境和生产环境,而每个环境基本上都是互相隔离的,也就是说,开发环境.测试环境和生产环境是互不相通的.在以前的开发过程中,如果开发人员 ...
随机推荐
- spring启动流程 (5) Autowired原理
构造方法参数Autowire BeanClass可以在构造方法上标注@Autowired注解,Spring在创建Bean实例时将自动为其注入依赖参数 Spring会优先使用标注@Autowired注解 ...
- SQL联结
1联结 那我们又该如何创建联结呢? So easy! 规定要联结的所有表以及它们如何关联就可以了. 在设置关联条件时,为避免不同表被引用的列名相同,我们需要使用完全限定列名(用一个点分隔表名和列名), ...
- SpringBoot02:运行原理初探
@EnableAutoConfiguration @EnableAutoConfiguration:开启自动配置功能 以前我们需要自己配置的东西,而现在SpringBoot可以自动帮我们配置 @Ena ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.18)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]【SQL Server】varchar和nvarchar的基本介绍及其区别
https://www.cnblogs.com/zhaoyl9/p/15243556.html varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 ...
- [转帖]ls 只显示目录
https://www.cnblogs.com/lavin/p/5912369.html 只显示目录: ls -d */ 在实际应用中,我们有时需要仅列出目录,下面是 4 种不同的方法. 1. 利用 ...
- [转帖]jmeter编写测试脚本大全
目录 一.背景 二.按照功能划分 2.1 加密处理.验签处理 2.2 jmeter 使用beanshell 编写脚本 2.3 jmeter脚本报错大全 2.4 jmeter打印log 2.5 jmet ...
- [转帖]linux 下 {}大括号的用法
我们平时使用Linux的时候经常遇到这样一个问题,举例有这样一种情况:执行命令 $ cp /etc/apt/sources.list /etc/apt/sources.list.bak 这里面有个问题 ...
- mysql8 initialize 命令 初学版 lower_case_table_names
1. 今天开发找我跟我说 我安装的mysql 不对. 比较蛋疼. 需要修改一个参数 但是数据库已经初始进去了 重装起来比较麻烦. 硬着头皮搞. 2. 参数的名字为: lower_case_tabl ...
- [转贴]Kubernetes之修改NodePort对外映射端口范围
https://www.cnblogs.com/minseo/p/12606326.html k8s默认使用NodePort对外映射端口范围是30000-50000可以通过修改kube-apiserv ...