• 重新整理 .net core 实践篇—————配置系统之环境配置[九]


    前言

    在当今在互联网微服务比较适用的情况下,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_会被过滤掉。

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

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

  • 相关阅读:
    【java】浅谈java内部类
    【java】java反射初探 ——“当类也学会照镜子”
    【java】关于java类和对象,你想知道的在这里!
    【javascript】谈谈HTML5: Web-Worker、canvas、indexedDB、拖拽事件
    【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
    【javascript】详解变量,值,类型和宿主对象
    【javascript】异步编年史,从“纯回调”到Promise
    [转] golang 字符串比较是否相等
    because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checkin
    desktoplayer.exe病毒及d:w7rtmasewcpsilmerged tu tsystem.cpp的解决方案
  • 原文地址:https://www.cnblogs.com/aoximin/p/14827241.html
Copyright © 2020-2023  润新知