前言

在当今在互联网微服务比较适用的情况下,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. 2021 年最值得推荐的 7 个 Angular 前端组件库 - DevUI

    摘要:DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工 ...

  2. 二. 简单初步认识SpringCloud

    (一)微服务的实现方式很多,但是最火的莫过于Spring Cloud了.为什么? 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大. 技术强:Spring作为Java领域 ...

  3. Weekly Contest 139

    1071. Greatest Common Divisor of Strings For strings S and T, we say "T divides S" if and ...

  4. 01- web测试快速入门

    web测试与APP测试最非常重要的两个测试种类.web端指的就是在浏览器页面的测试. 你测试的软件通常是两种结构的,B/S架构与C/S架构. B/S架构:Browser/Server 浏览器与服务器模 ...

  5. Python中Scapy网络嗅探模块的使用

    目录 Scapy scapy的安装和使用 发包 发包和收包 抓包 将抓取到的数据包保存 查看抓取到的数据包 格式化输出 过滤抓包 Scapy scapy是python中一个可用于网络嗅探的非常强大的第 ...

  6. Windows PE资源表编程(枚举资源树)

    资源枚举 写一个例子,枚举一个PE文件的资源表.首先说下资源相关的作为铺垫. 1.资源类型也是PE可选头中数据目录的一种.位于第三个类型. 2.资源目录分为三层.第四层是描述文件相关的.这些结构是按照 ...

  7. Windows核心编程 第十八章 堆栈

    第1 8章 堆 栈 对内存进行操作的第三个机制是使用堆栈.堆栈可以用来分配许多较小的数据块.例如,若要对链接表和链接树进行管理,最好的方法是使用堆栈,而不是第 1 5章介绍的虚拟内存操作方法或第1 7 ...

  8. nodejs-模块系统

    Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node. ...

  9. Cannot read property 'style' of null

    代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  10. HTML <video>

    HTML <video> 元素 用于在HTML或者XHTML文档中嵌入媒体播放器,用于支持文档内的视频播放.你也可以将 <video> 标签用于音频内容,但是 <audi ...