zoukankan      html  css  js  c++  java
  • Service Fabric service 根据环境变量读取配置文件

    前言

    一个服务或者产品,往往需要三个环境:一个开发环境(Development),一个测试环境(Staging),一个生产环境(Production),
    这就不可避免的需要多个配置文件来匹配相应的环境,因为不可能三个环境都使用同一个配置,生产的数据直接就被污染了。

    为了便于管理所有的配置字符串,把他们集中在一个json文件,程序启动时就序列化出来,有需要更新的时候,直接修改json文件即可,不必修改代码,以免regression或者引入新的bug。

    旧方法

    把开发的代码部署到测试环境的时候,需要手动merge到测试环境的branch,这个merge过程,需要把修改配置文件;
    同理,在测试环境通过好,部署到生产环境时,还要再次手动merge一次到production的branch,之后VSTS部署merge后的branch。

    这个过程,繁杂不说,难免出现配置遗漏,错配,或者交接的困难,毕竟谁都有犯迷糊的时候。

    根据环境变量自动读取

    .Net Core的project,都有一个startup.cs文件,这个文件是服务启动的时候就会执行的过程,所以选在这里把需要的依赖注入,进行初始化:

    public Startup(IHostingEnvironment env)
    {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
    
            //Get key vault URL and environment
            var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();
            EnvironmentSettings settings = SettingsProvider.Settings(appSettings.KeyVaultURI, appSettings.Environment);
            ServiceManager.Initialize(settings);
    }
    

    这个构造函数的参数env,带有环境变量的值:env.EnvironmentName,根据这个值的不同,在项目里添加三个settings的json文件。

    每一个josn里面的结构必须保持一下,这样序列化的时候才能正常解析正确的值。当然,也要符合json的语法,可以使用json校验工具检查一下。

    配置project环境变量

    .net Core的项目文件,在PackageRoot下,都有一个ServiceManifest.xml文件,把一下代码加入进去,要注意的是环境变量的Name必须是:ASPNETCORE_ENVIRONMENT
    否则读取失败。

    默认是开发环境(Development)。

    环境变量可以被override

    在Service fabric下,有个ApplicationManifest.xml

    这个文件可以配置对应的参数列表(parameters),添加一列环境变量:

    在这个文件的下方,在需要根据环境变量读取配置的project对应节点内,添加环境变量的Name-Value,这里[Environment]的意思是,读取上图中的Environment参数对应的值。

    部署时,选择对应的xml文件

    在ApplicationParamerters文件夹下,添加对应的参数文件,每个文件的内容就是对应部署环境的配置文件的名称:

    publish的时候,选择对应部署环境的xml文件即可:

    这样,主要部署的时候,选对了相应的xml文件,程序启动的时候,startup就可以正确读取到对应的配置。

    后记

    这应就减少课很多出错的可能,项目交接的时候,也不省了不少交接内容。

    参考:https://stackoverflow.com/questions/33928204/where-do-you-set-and-access-run-time-configuration-parameters-per-environment-fo
    https://docs.microsoft.com/en-us/powershell/module/servicefabric/new-servicefabricapplication?view=azureservicefabricps

    如果觉得有帮助,就点个推荐吧;
    如果写的不好,欢迎评论指出。

  • 相关阅读:
    ECshop 二次开发模板教程4
    ECshop 二次开发模板教程3
    ECshop 二次开发模板教程2
    ECshop 二次开发模板教程1
    ecshop 二次开发及模板标签
    ECSHOP seo修改建议
    Ecshop ajax 局部刷新购物车功能
    ECSHOP
    echo二次开发 ecshop 函数列表
    Ecshop文件结构,二次开发
  • 原文地址:https://www.cnblogs.com/shy-huang/p/10761357.html
Copyright © 2011-2022 走看看