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配置的到处都是,略显冗余混乱。

解决办法:统一配置到数据库,方便修改。

效率考虑:增加一层静态缓存,采用定时刷新策略。

转载于:https://www.cnblogs.com/eval/p/6184142.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值