zoukankan      html  css  js  c++  java
  • 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配置的到处都是,略显冗余混乱。

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

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

  • 相关阅读:
    【转】sql 如何设计数据库表实现完整的RBAC(基于角色权限控制)
    【转】windows自带终止进程的超强命令
    【源码】 gridview 里使用checkbox
    【转】调用 开始 运行 直接执行命令
    【源码】DropDownList绑定数据
    C++ 编译器数据类型差异
    Flash 中将不透明的 Bitmap 透明化处理
    使用命令行切换IP地址
    MKV 高清视频文件分解与封装和音频编码的转换
    Visual Studio 2010 C++ 用户属性设置
  • 原文地址:https://www.cnblogs.com/eval/p/6184142.html
Copyright © 2011-2022 走看看