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变量:环境变量的配置文件和登录信息
----------------------------------------------------------------------------------------- 只有把环境变量放入配 ...
随机推荐
- MySQL中的外键约束
- MySQL数据库主从分离的配置方法
1.介绍 MySQL数据库设置读写分离,可以使对数据库的写操作和读操作在不同服务器上执行,提高并发量和响应速度.现在的网站一般大点的,都采用有数据库主从分离.读写分离,既起到备份作用也可以减轻数据库的 ...
- 洛谷 P3853 解题报告
P3853 路标设置 题目背景 B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离.为了便于研究这个问题,我们把公路 ...
- [CVPR 2017] Semantic Autoencoder for Zero-Shot Learning论文笔记
http://openaccess.thecvf.com/content_cvpr_2017/papers/Kodirov_Semantic_Autoencoder_for_CVPR_2017_pap ...
- 夜神模拟器链接Android studoid
在cmd 窗口输入:adb.exe connect 127.0.0.1:62001然后as就自动匹配了夜神经常忘记,特此提醒
- 网络营销行业十大看了就想吐的“滥词”
网络营销行业在国内的互联网界已"猖獗"数年之久,它是一个让企业爱让用户恨的行业.有互联网的地方,就有网络营销的机会,有了机会就有了相关产业的存在,只不过是业大业小的问题.但是随着互 ...
- PAT1049:Counting Ones
1049. Counting Ones (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The tas ...
- 记录几个经典的字符串hash算法
记录几个经典的字符串hash算法,方便以后查看: 推荐一篇文章: http://www.partow.net/programming/hashfunctions/# (1)暴雪字符串hash #inc ...
- SSM-SpringMVC-19:SpringMVC中请求和响应的乱码解决
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 配置一道拦截器即可解决乱码 配置方式如下: 在web.xml中: <!--过滤器处理乱码--> ...
- Python定时任务框架APScheduler
http://blog.csdn.net/chosen0ne/article/details/7842421 APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz ...