AppSettings从数据库读取
1 /// <summary> 2 /// 提供对配置信息的访问 3 /// </summary> 4 public static class AppSettings 5 { 6 /// <summary> 7 /// 配置信息 8 /// </summary> 9 private static volatile NameValueCollection _appSettingsCollection; 10 11 /// <summary> 12 /// 配置信息属性 13 /// </summary> 14 private static NameValueCollection AppSettingsCollection 15 { 16 get 17 { 18 return _appSettingsCollection ?? ReloadAppSettings(); 19 } 20 } 21 22 /// <summary> 23 /// 重新加载配置信息 24 /// </summary> 25 /// <returns></returns> 26 static NameValueCollection ReloadAppSettings() 27 { 28 var nameValueCollection = new NameValueCollection(); 29 //从数据库读取配置 30 xxx.ToList() 31 .ForEach(entity => 32 { 33 nameValueCollection[entity.Name] = entity.Value; 34 }); 35 LastAppSettingsDateTime = DateTime.Now; 36 _appSettingsCollection = nameValueCollection; 37 return _appSettingsCollection; 38 } 39 40 /// <summary> 41 /// 在启动时以后台任务刷新配置信息 42 /// </summary> 43 static AppSettings() 44 { 45 Task.Factory.StartNew(() => 46 { 47 //按配置间隔分钟刷新配置信息 48 for (; ; ) 49 { 50 try 51 { 52 //取配置的间隔分钟,默认为1分钟 53 double minutes; 54 if (_appSettingsCollection == null 55 || !double.TryParse(_appSettingsCollection["AppSettingsRefreshIntervalMinutes"], out minutes) 56 || minutes < 0.1) 57 minutes = 1D; 58 59 Task.Delay(TimeSpan.FromMinutes(minutes)).Wait(); 60 ReloadAppSettings(); 61 } 62 catch (Exception ex) 63 { 64 } 65 } 66 }, TaskCreationOptions.LongRunning); 67 } 68 69 /// <summary> 70 /// 获取配置信息 71 /// </summary> 72 /// <param name="name"></param> 73 /// <returns></returns> 74 public static string Get(string name) 75 { 76 return AppSettingsCollection[name]; 77 } 78 79 /// <summary> 80 /// 最后获取配置信息的时间 81 /// </summary> 82 public static DateTime LastAppSettingsDateTime { get; private set; } 83 }
遇到的问题:对于相同代码多处部署时,AppSettings配置的到处都是,略显冗余混乱。
解决办法:统一配置到数据库,方便修改。
效率考虑:增加一层静态缓存,采用定时刷新策略。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步