zoukankan      html  css  js  c++  java
  • 重新整理 .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_会被过滤掉。

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

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

  • 相关阅读:
    数据库总结
    数据库 查询方法详解 以学生老师信息表为例
    SQL 常与LIKE关键字配合使用,表示一个模糊的范围 。
    SQL 数据类型
    十分钟搞清字符集和字符编码
    c# 集合
    c# 开根号 牛顿迭代
    c# 打名字
    转 揭开计算机的神秘面纱 来源:吴广磊的博客
    c# while穷举(凑钱)
  • 原文地址:https://www.cnblogs.com/aoximin/p/14827241.html
Copyright © 2011-2022 走看看