/// <summary>
/// 提供对配置信息的访问
/// </summary>
public static class AppSettings
{
/// <summary>
/// 配置信息
/// </summary>
private static volatile NameValueCollection _appSettingsCollection; /// <summary>
/// 配置信息属性
/// </summary>
private static NameValueCollection AppSettingsCollection
{
get
{
return _appSettingsCollection ?? ReloadAppSettings();
}
} /// <summary>
/// 重新加载配置信息
/// </summary>
/// <returns></returns>
static NameValueCollection ReloadAppSettings()
{
var nameValueCollection = new NameValueCollection();
//从数据库读取配置
xxx.ToList()
.ForEach(entity =>
{
nameValueCollection[entity.Name] = entity.Value;
});
LastAppSettingsDateTime = DateTime.Now;
_appSettingsCollection = nameValueCollection;
return _appSettingsCollection;
} /// <summary>
/// 在启动时以后台任务刷新配置信息
/// </summary>
static AppSettings()
{
Task.Factory.StartNew(() =>
{
//按配置间隔分钟刷新配置信息
for (; ; )
{
try
{
//取配置的间隔分钟,默认为1分钟
double minutes;
if (_appSettingsCollection == null
|| !double.TryParse(_appSettingsCollection["AppSettingsRefreshIntervalMinutes"], out minutes)
|| minutes < 0.1)
minutes = 1D; Task.Delay(TimeSpan.FromMinutes(minutes)).Wait();
ReloadAppSettings();
}
catch (Exception ex)
{
}
}
}, TaskCreationOptions.LongRunning);
} /// <summary>
/// 获取配置信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static string Get(string name)
{
return AppSettingsCollection[name];
} /// <summary>
/// 最后获取配置信息的时间
/// </summary>
public static DateTime LastAppSettingsDateTime { get; private set; }
}

遇到的问题:对于相同代码多处部署时,AppSettings配置的到处都是,略显冗余混乱。

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

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

AppSettings从数据库读取的更多相关文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  2. 10天学会phpWeChat——第三天:从数据库读取数据到视图

    在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...

  3. echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端

    1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧. 就以官网最简单的那个小demo来做修改吧.官网上的小de ...

  4. C# 图片保存到数据库和从数据库读取图片并显示

    图片保存到数据库的方法: public void imgToDB(string sql)        {   //参数sql中要求保存的imge变量名称为@images            //调 ...

  5. C#实现从数据库读取数据到Excel

    用第三方组件:NPOI来实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI ...

  6. 初学coreData数据库读取不成功的问题

    写了一个从数据库读取数据显示列表的代码,结果却无法运行,提示找不到对应的entity,也就是数据库中的某一个表 我查遍了代码也没有发现什么逻辑错误,在appDelegate也初始化了相关数据库,在界面 ...

  7. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体

    //浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...

  8. ASP.NET状缓存Cache的应用-提高数据库读取速度

    原文:ASP.NET状缓存Cache的应用-提高数据库读取速度 一. Cache概述       既然缓存中的数据其实是来自数据库的,那么缓存中的数据如何和数据库进行同步呢?一般来说,缓存中应该存放改 ...

  9. 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行

    错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...

随机推荐

  1. C#操作XML的方法

    添加命名空间: using System.Xml; 1,先创建一个BookModel类 using System; using System.Collections.Generic; using Sy ...

  2. phpcms无刷新分页

    控制器添加一个函数: 添加一个静态页面ajax_message.html,在页面中添加如下代码: 在要分页的页面(我的是"show"页面)中添加如上图代码: phpcms无刷新分页 ...

  3. 安卓中級教程(5):ScrollView與refreshable之間的設置

    設置向下拉動更新. package com.mycompany.Scroll_test; import android.app.*; import android.os.*; import andro ...

  4. [lua]安卓ndk如何编译lua库

    这里说的lua库是标准lua库,不包含tolua,不包含cocos2dx的各种lua扩展,是干净的lua. 参考: http://stackoverflow.com/questions/1229965 ...

  5. Flink - InstanceManager

    InstanceManager用于管理JobManager申请到的taskManager和slots资源 /** * Simple manager that keeps track of which ...

  6. webbrowser 内核切换

    修改注册表位置: [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER ...

  7. 【Html 学习笔记】第一节——基础标签

    前端技术一直是欠缺,从今天开始以后打算每天抽出一部分的时间进行学习,尽快把这方面补上来.感觉测试人员还是需要一些前端技能的,我这里学习地址是:W3CSchool 废话不多说了,直接在文本编辑器中编辑好 ...

  8. css 居中问题

    水平居中有text-align:center 和 margin:0 auto,前者是针对父元素进行设置而后者则是对子元素.margin:0 auto; 这里实现的前提是子元素没有float 浮动起来, ...

  9. C# 日期格式转【转】

    使用:DateTime.ToString的方法(String, IFormatProvider)转换格式 using System; using System.Globalization; Strin ...

  10. 在strust2 框架下,前端APP传过来的中文数据乱码问题

    public String addMessage() throws UnsupportedEncodingException{ Patient patient=new Patient(); patie ...