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

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

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

posted @ 2016-12-15 17:34  致那向往的远方  阅读(694)  评论(0编辑  收藏  举报