前言

在当今在互联网微服务比较适用的情况下,docker 可以说一个利器。每次我们打包docker的时候都是适用docker 的配置文件,那么配置文件里面会设置环境变量,这个时候需要我们的应用能够识别到这些环境变量并作出相应的选择。

适用场景:

docker 运行环境

k8s 运行环境

因为他们都是隔离机制的,故而环境变量能够发挥其非常好的作用。

正文

引入:microsoft.extensions.configuration.environmentVariables 这个包。

设置环境变量:

对应的lauchSettings.json 如下:

{
"profiles": {
"ConfigureDemo": {
"commandName": "Project",
"commandLineArgs": "-k1=value4",
"environmentVariables": {
"section1__key2": "value2",
"key1": "value1"
}
}
}
}

这个section1__key2,section1和key2 之间是两个_,作为他们的分层符号。

代码:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables(); var configurationRoot = builder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}"); var section = configurationRoot.GetSection("section1");
Console.WriteLine($"key2:{section["key2"]}");

运行结果:

无限套娃模式也是适用的,前面原理已经讲过了,这里只演示代码。

{
"profiles": {
"ConfigureDemo": {
"commandName": "Project",
"commandLineArgs": "-k1=value4",
"environmentVariables": {
"section1__key2": "value2",
"key1": "value1",
"section2__section3__key3": "value3"
}
}
}
}

代码:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables(); var configurationRoot = builder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}"); var section = configurationRoot.GetSection("section1");
Console.WriteLine($"key2:{section["key2"]}"); var section2 = configurationRoot.GetSection("section2");
var section3 = section2.GetSection("section3");
Console.WriteLine($"key3:{section3["key3"]}");

除了上面的__可以作为section的分层符之外,:也是可以的。

下面演示前缀过滤:

{
"profiles": {
"ConfigureDemo": {
"commandName": "Project",
"commandLineArgs": "-k1=value4",
"environmentVariables": {
"key1": "value1",
"k8s_key2": "value2"
}
}
}
}

代码:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables("k8s_"); var configurationRoot = builder.Build(); Console.WriteLine($"key1:{configurationRoot["key1"]}");
Console.WriteLine($"key2:{configurationRoot["key2"]}");

结果:

就是说不是k8s_会被过滤掉。

下一节 配置系统之强类型配置。

以上只是个人整理,如有错误,望请指点,谢谢。

重新整理 .net core 实践篇—————配置文件之环境配置[九]的更多相关文章

  1. 重新整理 .net core 实践篇—————领域事件[二十九]

    前文 前面整理了仓储层,工作单元模式,同时简单介绍了一下mediator. 那么就mediator在看下领域事件启到了什么作用吧. 正文 这里先注册一下MediatR服务: // 注册中间者:Medi ...

  2. 重新整理 .net core 实践篇————重定向攻击[三十九]

    前言 简单介绍一下重定向攻击. 正文 攻击思路: 看着上面挺复杂的,其实是一些很简单的步骤. 攻击者通过某些手段,让用户打开了一个好站点,打开的这个地址里面带有重定向信息,重定向信息就是自己伪造的站点 ...

  3. 重新整理 .net core 实践篇————配置应用[一]

    前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开 ...

  4. 重新整理 .net core 实践篇—————配置系统之间谍[八](文件监控)

    前言 前文提及到了当我们的配置文件修改了,那么从 configurationRoot 在此读取会读取到新的数据,本文进行扩展,并从源码方面简单介绍一下,下面内容和前面几节息息相关. 正文 先看一下,如 ...

  5. 重新整理 .net core 实践篇————依赖注入应用[二]

    前言 这里介绍一下.net core的依赖注入框架,其中其代码原理在我的另一个整理<<重新整理 1400篇>>中已经写了,故而专门整理应用这一块. 以下只是个人整理,如有问题, ...

  6. 重新整理 .net core 实践篇————配置系统——军令(命令行)[六]

    前言 前文已经基本写了一下配置文件系统的一些基本原理.本文介绍一下命令行导入配置系统. 正文 要使用的话,引入Microsoft.extensions.Configuration.commandLin ...

  7. 配置文件,环境配置和war报分离,方便生产更改

    在生产环境实现配置文件和war包 的分离,为方便在必要的时候进行一定的更改,可以避免修改包,但是需要重启 最初为这样的选择配置,单不知为何未生效,修改为配置2配置方法,但不灵活,待跟进.配置1: &l ...

  8. (四)Spring Boot之配置文件-多环境配置

    一.Properties多环境配置 1. application.properties配置激活选项 spring.profiles.active=dev 2.添加其他配置文件 3.结果 applica ...

  9. 重新整理 .net core 实践篇—————配置系统之军令状[七](配置文件)

    前言 介绍一下配置系统中的配置文件,很多服务的配置都写在配置文件中,也是配置系统的大头. 正文 在asp .net core 提供了下面几种配置文件格式的读取方式. Microsoft.extensi ...

随机推荐

  1. Day14_84_通过反射机制修改和获取class里的属性值

    通过反射机制修改和获取class里的属性值 * 属性对象.set(Object,属性值) 给Object对象中的某个属性赋值(属性对象) * 属性对象.get(Object); 获取Object对象中 ...

  2. js时间对象Date()

    Date ()是一个专门用来创建时间对象的,是一个复杂数据类型,具有读写属性 语法: var time = new Date() 返回值:当前终端的时间 // 1.创建当前时间对象 var time ...

  3. CentOS7 常用基础操作

    系统目录结构了解 CentOS系统中没有磁盘的概念,一切皆文件,/目录下的的一个个文件夹目录就相当于磁盘了,这里简单记录几个常用的目录以及对应的作用: dev:Linux一切皆文件,包括硬件也进行了文 ...

  4. 从苏宁电器到卡巴斯基第12篇:我在苏宁电器当营业员 IV

    卖iPhone首先是需要接受培训的 像iPhone这样的重点产品,并不是只要选好了人(营业员),说卖就能卖的,在正式销售之前需要接受厂家的培训.如果说人事关系或者产品源隶属于苹果,那么是由苹果中国公司 ...

  5. 深入学习Android系统上mount命令的使用

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52493227 在Android系统的预装apk病毒和elf病毒的清除时,经常需要先获取 ...

  6. Host头部攻击

    在HTTP的请求报文中,我们经常会看到Host字段,如下 GET /test/ HTTP/1.1 Host: www.baidu.com Connection: keep-alive Upgrade- ...

  7. 将HTML字符串编译为虚拟DOM对象的基础实现

    本文所有代码均保存在HouyunCheng / mini-2vdom 虚拟DOM只是实现MVVM的一种方案,或者说是视图更新的一种策略,是实现最小化更新的diff算法的操作对象. 创建扫描器 所有编译 ...

  8. json-lib-2.1-jdk15.jar

    链接:https://pan.baidu.com/s/1VvpCHoTZWJU2l0c6D1MhJg 提取码:jheq http://www.java2s.com/

  9. Jenkins 基础篇 - 基础设置

    站点设置 刚搭建好 Jenkins 环境,你还需要做一些简单设置,让我们的 Jenkins 看起来是这么一回事,特别是你要用于生产环境的时候.首先就是域名配置,如果你为 Jenkins 服务分配了一个 ...

  10. linux远程下载文件 的两种方法之 ftp命令和scp命令

    ftp命令: 服务器有安装ftp Server,另外一台linux可以使用ftp的client程序来进行文件的拷贝读取和下载. 1. 连接ftp服务器  格式:ftp [hostname| ip-ad ...