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
如果觉得有帮助,就点个推荐吧;
如果写的不好,欢迎评论指出。
Service Fabric service 根据环境变量读取配置文件的更多相关文章
- Spring Boot 环境变量读取 和 属性对象的绑定
网上看到的一些方法,结合我看到的 和我们现在使用的.整理成此文: 第一种方法 参见catoop的博客之 Spring Boot 环境变量读取 和 属性对象的绑定(尊重原创) 第二种方法 class不用 ...
- Spring使用环境变量控制配置文件加载
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
- Spring使用环境变量控制配置文件加载(转)
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
- bash环境变量读取顺序
bash环境变量读取顺序: 交互式登录的用户: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bas ...
- ASP.NET Core 从 gitlab-ci 环境变量读取配置
最近在加强持续集成,遇到一个场景需要通过 gitlab-ci 环境变量(Settings -> Settings -> CI/CD -> Variables )在持续集成时向 ASP ...
- CentOS中环境变量和配置文件
什么是环境变量 bash shell用一个叫做 环境变量(environment variable) 的特性来存储有关shell会话和工作环境的信息.即允许在内存中存储数据,使得在程序或shell中运 ...
- Linux Shell脚本在service模式下的环境变量
普通Shell脚本在终端下运行时,环境变量来自于init/profile/.bash_profile等,就是在当前终端下可以得到的环境,比如PATH.在service模式下,脚本运行在受限的环境中:比 ...
- 十五、Spring Boot 环境变量读取 和 属性对象的绑定
凡是被spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量. 如: @ ...
- [Shell]Bash变量:环境变量的配置文件和登录信息
----------------------------------------------------------------------------------------- 只有把环境变量放入配 ...
随机推荐
- Pycharm的相关设置和快捷键集合
原文参考地址:python 环境搭建及pycharm的使用 一.相关设置 1.主题和字体 主题选这个 字体大小在这里设置 二.快捷键 1.编辑(Editing)Ctrl + Space 基本的代码完成 ...
- WEB自动化(Python+selenium)的API
在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家 ...
- iOS开发-程序的生命周期
为了更好的管理程序,了解程序的生命周期是很有必要的. 运行结果: 1.首次启动: 2015-05-26 17:33:28.362 Live[4858:214241] 程序开始 2015-05-26 1 ...
- SSM-SpringMVC-18:SpringMVC中参数自动装配
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 在处理方法中,参数写上之后,只要符合特定规则,就可以自动装配 首先 其次是:自定义的参数的自动装配: 案例如 ...
- SSM-SpringMVC-05:SpringMVC视图解析器InternalResourceViewResolver配置
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 视图解析器------默认就有配置,但是默认的在实际使用过程中有很多不方便的地方,所以我们配置一道视图解析器 ...
- sql server 高可用故障转移(3)
虚拟磁盘创建 前面我们已经搭了域和两台sql 服务器, 下面我们准备让DC域服务器除了担当域控制器外,还行使另一个职能:充当集群共享存储. 集群共享存储是由群集内的每个节点都能共同访问的一个存储设备, ...
- Loadrunner三种post格式的请求
Loadrunner三种post格式的请求 web_custom_request intweb_custom_request(const char *RequestName, <List of ...
- c# xml操作(二)
c# xml操作(二) 此博文包含图片 (-- ::)转载▼ 标签: 杂谈 分类: c# 上次,我们介绍了增加和删除xml的一些操作,这次我们将介绍如何更改和读取xml特定节点.我们依然以上次的xml ...
- 《javascript语言精粹》读书笔记 Item2 对象
第三章 对象 JavaScript的简单数据类型包括数字.字符串.布尔值(true和false).null值和undefined值.其他 数字.字符串和布尔值"貌似"对象,因为它们 ...
- Python定时任务框架APScheduler
http://blog.csdn.net/chosen0ne/article/details/7842421 APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz ...