如何让.NET Core应用的配置与源文件保持同步?
来源:互联网 发布:packageinfo.java作用 编辑:程序博客网 时间:2024/06/06 05:19
最近.NET是个非常热门的行业,那如何成为炙手可热的网络工程师,在本篇文章中,我就来跟大家分享一篇教程-----.NET Core应用的配置如何与源文件保持同步。希望能帮助到大家!
配置的同步涉及到两个方面:第一,对原始的配置文件实施监控并在其发生变化之后从新加载配置;第二,配置重新加载之后及时通知应用程序进而使后者能够使用最新的配置。接下来我们利用一个简单的.NET Core控制台应用来演示针对文件的配置会涉及到数据同步的问题,我们希望应用能够对原始配置文件实施监控,并在文件内容发生改变的时候从新加载并应用新的配置。针对JSON文件的配置源通过JsonConfigurationSource类型来表示,该类型定义在“Microsoft.Extensions.Configuration.Json”这个NuGet包中,所以我们需要在project.json文件中按照如下的形式添加针对这个NuGet包的依赖。
1: {
2: ...
3: "dependencies": {
4: ...
5: "Microsoft.Extensions.Configuration.Json": "1.0.0"
6: }
7: }
假设我们需要通过配置来当前应用使用的线程池的容量,这样的设置需要根据当前的负载进行调整,所以需要很高的时效性,我们希望一旦修改了JSON文件的配置,应用程序中针对线程池的相关设置可以立即生效。简单起见,我们仅仅定义MinThreads 和MaxThreads这两个分别决定线程池容量区间的配置项,如下所示的ThreadPoolOptions是对应的Options类型。
1: public class ThreadPoolOptions
2: {
3: public int MinThreads { get; set; }
4: public int MaxThreads { get; set; }
5:
6: public override string ToString()
7: {
8: return $"Thread pool size: [{MinThreads}, {MaxThreads}]";
9: }
10: }
我们在项目中添加一个名为threadPool.json的文件来定义线程池的配置。除此之外,我们需要通过修改project.json与编译相关的配置让该文件在编译的时候自动拷贝到输出目录下(默认为bin目录)。具体来说,我们只需要按照如下的方式将该文件的路径设置为“builtOptions/copyToOutput”配置选购的值就可以了。
1: {
2: ...
3: "buildOptions": {
4: ...
5: "copyToOutput": "threadPool.json"
6: }
7: }
接下来我们编写了如下一段程序来演示应用中使用的配置如何与配置文件的内容保持同步。我们首先创建了一个ConfigurationBuilder对象,并在它上面注册了一个JsonConfigurationSource。在创建这个JsonConfigurationSource对象的时候,除了指定配置文件(“threadPool.json”)的路径之外,我们还将它的ReloadOnChange属性设置为True。顾名思义,这个ReloadOnChange属性的含义就是当原始配置文件的内容发生改变的时候是否需要重新加载配置。
在利用ConfigurationBuilder得到Configuration对象之后,我们调用它的GetReloadToken方法得到一个ChangeToken对象,后者会帮助我们判断配置是否被重新加载。我们调用ChangeToken类型的静态方法OnChange为这个ChangeToken对象注册了一个回调,该回调会在配置被重新加载时自动执行。至于这个注册的回调,我们仅仅是采用Options模式得到配置绑定生成的ThreadPoolOptions对象,并将它的相关信息打印在控制台上。
在这段程序的最后,我们在一个无限循环中以5秒钟的间隔对threadPool.json文件进行更新。按照这段程序的意图,当我们每次完成了针对threadPool.json的更新之后,我们创建的Configuration对象会自动重新加载。Configuration一旦重新加载,之前调用它的GetReloadToken方法得到ChangeToken对象的HasChanged属性将变成True,注册在它上面的回调将被执行。所以最终的结果就是重新设置的配置会实时出现在控制台上,如下所示的输出结果证实了这一点。
- 如何让.NET Core应用的配置与源文件保持同步?
- fork的项目如何与原项目保持同步?
- 如何实现微信小程序与.net core应用服务端的无状态身份验证
- 让 folk出的项目 与 原项目 保持同步的几条命令
- 使用iCloud让Safari与Chrome/FireFox/IE的书签保持同步
- .Net Core配置与自动更新
- .Net Core配置与自动更新
- 如何保持自己的应用和关联的第三方框架同步更新?
- 如何让你的电脑保持清爽
- 如何让应用在清除内存时保持运行
- 如何保持github上fork的项目与原项目同步
- 如何保持从github上fork过来的项目与作者同步更新
- 如何让你的XP桌面与Bing同步
- .NET中资源文件的创建与使用
- 如何获取与下载ASF的源文件?
- 如何配置自己的Activity,让其他应用调用
- 保持技术与应用的创新优势
- 如何保持Linux服务器间的文件同步
- WEB前端使用 webpack + reack 搭建框架 01 基础框架
- PHP开发接口使用RSA进行加密解密方法
- <NOIP> 17 . P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
- java面试考点精讲视频教程!
- linux下的缓存机制及清理buffer/cache/swap的方法梳理 【转】
- 如何让.NET Core应用的配置与源文件保持同步?
- POJ 3207 Ikki's Story IV
- LINUX下tomcat的jvm编码修改
- redis配置认证密码
- 碧桂园20亿揽柳州2宗商住地 中海昆明溢价率201%地块无效
- 十三、使用PropTypes进行类型检测
- 2017年6月30日 在5427机房
- python小程序-0001
- 嵌入式linux基础学习全套精品视频教程