上一篇中讨论了Rookey.Frame框架菜单配置功能,这一节我们继续学习Rookey.Frame框架的数据库连接配置。

之前介绍了Rookey.Frame框架支持跨多数据库,并且支持读写分离,不过目前还不是太完善,目前只对mssql server完全支持,对其他数据库还有部分功能未实现,在后续会逐渐完善。针对多数据库配置,框架中有两个地方配置数据库连接字符串,一个是网站根目前下的web.config,另外一个是Rookey.Frame.Web\Config\modelConfig.xml,在web.config中数据库连接配置如下:

<connectionStrings>
<add name="DbReadConnString" connectionString="Data Source=.;Initial Catalog=Rookey_Frame;User ID=sa;Password=123456;Pooling=true;MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30" providerName="System.Data.SqlClient" />
</connectionStrings>

web.config中配置的连接字符串为默认连接数据库,其中name为DbReadConnString的默认为读数据库,name为DbWriteConnString的为写数据库。

在modelConfig.xml中配置如下:

<?xml version="1.0" encoding="utf-8"?>
<Root>
<BaseLogEntity isEnableCache="0" cacheType="0" dbType="MsSqlServer" readConnString="Data Source=.;Initial Catalog=Rookey_Log;User ID=sa;Password=123456;Pooling=true;MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30"></BaseLogEntity>
<!--系统模块全部启用缓存-->
<BaseSysEntity isEnableCache="1" cacheType="0"></BaseSysEntity>
</Root>

其中BaseLogEntity、BaseSysEntity分别为日志基类和系统模块基类,这里配置的意思是,系统日志所有模块对应的连接字符串为Data Source=.;Initial Catalog=Rookey_Log;User ID=sa;Password=123456;Pooling=true;MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30,对于系统模块则为默认的连接数据库,这里BaseLogEntity、BaseSysEntity也可以换成具体的模块类名(也即数据表名),那所配置的模块则是单独的数据库,也就是说系统中所有的功能模块都可以配置单独的数据库,系统查找数据库连接串时,会先找当前模块有没有配置数据库连接串,如果没有则找父类配置,父类找不到再找父类,目前支持三级查找,如果没有找到自定义配置数据库连接,则取默认数据库连接,在Rookey.Frame.DALFactory\OrmLiteDalFactory.cs类中有个专门获取连接字符串的方法:

        /// <summary>
/// 获取连接字符串
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <param name="read">是否读</param>
/// <returns></returns>
private string GetConnString(string connString, bool read = true)
{
string lastConnStr = !string.IsNullOrEmpty(connString) ? connString : (read ? this.ReadConnectionString : this.WriteConnectionString);
string modelConfigConnString = GetModelConfigConnString(read); //取模块自定义数据库连接配置
if (string.IsNullOrEmpty(connString) && !string.IsNullOrEmpty(modelConfigConnString))
{
lastConnStr = modelConfigConnString;
}
NotNullCheck.NotEmpty(lastConnStr, "数据库连接字符串");
return lastConnStr;
}
        /// <summary>
/// 获取实体连接字符串
/// </summary>
/// <param name="modelType">实体类型对象</param>
/// <param name="dbType">数据库类型</param>
/// <param name="read">读写分离标识,是否读数据库,为否则取写数据库</param>
/// <returns></returns>
public static string GetModelConnString(Type modelType, out string dbType, bool read = true)
{
dbType = string.Empty;
string modelConfigPath = GetModelConfigXml();
string node = string.Format("/Root/{0}", modelType.Name);
bool nodeIsExists = XmlHelper.NodeIsExists(modelConfigPath, node);
if (!nodeIsExists) //不存在实体节点配置信息,找对应基类的节点配置信息
{
//取实体基类
Type baseType = modelType.BaseType;
if (baseType != null) //存在基类
{
node = string.Format("/Root/{0}", baseType.Name); //基类节点
nodeIsExists = XmlHelper.NodeIsExists(modelConfigPath, node);
}
}
if (!nodeIsExists) return string.Empty;
string tempConnStr = XmlHelper.Read(modelConfigPath, node, read ? "readConnString" : "writeConnString");
if (!read && string.IsNullOrEmpty(tempConnStr))
{
tempConnStr = XmlHelper.Read(modelConfigPath, node, "readConnString");
}
dbType = XmlHelper.Read(modelConfigPath, node, "dbType");
return tempConnStr;
}

另外isEnableCache为缓存配置标识,等于1时表示该基类下所有模块或该模块启用缓存,cacheType的值与以下枚举值对应:

    /// <summary>
/// 缓存类型
/// </summary>
public enum CacheProviderType
{
/// <summary>
/// 本地缓存
/// </summary>
LOCALMEMORYCACHE = , /// <summary>
/// MemcachedCache分布式缓存
/// </summary>
MEMCACHEDCACHE = , /// <summary>
/// redis分布式缓存
/// </summary>
REDIS =
}

另外缓存配置或数据库配置也可在系统界面上实现 :

最后需要说明的是针对Memcached和Redis实现分布式缓存则还需要配置Rookey.Frame.Web\Config下的memcachedcache.config和rediscache.config

memcachedcache.config:

<?xml version="1.0"?>
<MemcachedCacheConfigInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ServerList>
<string>127.0.0.1:11211</string>
</ServerList>
<MinPoolSize>10</MinPoolSize>
<MaxPoolSize>20</MaxPoolSize>
<ConnectionTimeOut>10</ConnectionTimeOut>
<QueueTimeOut>10</QueueTimeOut>
<ReceiveTimeOut>10</ReceiveTimeOut>
<DeadTimeOut>100</DeadTimeOut>
<CacheTimeOut>3600</CacheTimeOut>
</MemcachedCacheConfigInfo>

rediscache.config:

<?xml version="1.0" encoding="utf-8"?>
<RedisConfigInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Host>127.0.0.1</Host>
<Port>6379</Port>
<Pwd></Pwd>
<InitalDB>0</InitalDB>
</RedisConfigInfo>

好了,今天的介绍就到此地,下一篇介绍系统初始化功能,祝大家生活愉快!

Rookey.Frame之数据库及缓存配置的更多相关文章

  1. Rookey.Frame企业级极速开发框架

    项目详细介绍 Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性 ...

  2. Rookey.Frame v1.0快速开发平台-整体介绍

    Rookey.Frame v1.0是一套基于.NET MVC的极速开发框架,支持简单逻辑模块零代码编程.支持二次开发,具有高扩展性.高复用性.高伸缩性. 框架特点 (1)简单逻辑模块实现零代码编程,通 ...

  3. Rookey.Frame企业级快速开发框架开源了

    Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性:应广大网友要 ...

  4. Rookey.Frame v1.0极速开发平台稳定版发布

    Rookey.Frame v1.0经过一年时间的修改及沉淀,稳定版终于问世了,此版本经过上线系统验证,各个功能点都经过终端用户验证并持续优化,主要优化以下几个方面: 1.性能较原来提升3倍之多 2.修 ...

  5. Rookey.Frame之DAL工厂

    昨天给大家介绍了表单验证功能,今天给大家介绍下Rookey.Frame框架的数据层工厂,由于Rookey.Frame框架ORM是基于servicestack.ormlite,很多朋友反映这个网上中文资 ...

  6. Rookey.Frame之实体类

    上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计. 先看下下面菜单实体示例代码: using Rookey.Frame.EntityBase; using Ro ...

  7. Rookey.Frame之系统初始化

    昨天介绍了数据库的配置,今天继续介绍系统的初始化功能:针对系统初始化在开发中也是很重要的一部分,它可以提前将相关数据提前自动初始化到系统中,同时也可以为上线测试提供方便,可以很方便进行系统测试演练,防 ...

  8. Rookey.Frame v1.0快速开发平台-用户登录

    上一次介绍的了Rookey.Frame v1.0快速开发平台的整体功能,接下来会对各个功能点进行解析说明,今天给大家介绍下系统登录功能. 用户登录 系统中基本上所有功能页面都是从后台代码拼接后返回的, ...

  9. 【.net 深呼吸】自定义缓存配置(非Web项目)

    在前一篇烂文中,老周简单讲述了非Web应用的缓存技术的基本用法.其实嘛,使用系统默认方案已经满足我们的需求了,不过,如果你真想自己来配置缓存,也是可以的. 缓存的自定义配置可以有两种方案,一种是用代码 ...

随机推荐

  1. Hadoop基础原理

    Hadoop基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 业内有这么一句话说:云计算可能改变了整个传统IT产业的基础架构,而大数据处理,尤其像Hadoop组件这样的技术出 ...

  2. Spark记录-Scala数据类型

    Scala与Java具有相同的数据类型,具有相同的内存占用和精度.以下是提供Scala中可用的所有数据类型的详细信息的表格: 序号 数据类型 说明 1 Byte 8位有符号值,范围从-128至127 ...

  3. 2017 国庆湖南 Day1

    卡特兰数 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ] ...

  4. Linux根目录解析

    根目录结构如下: 1. / - 根目录: 每一个文件和目录都从这里开始. 只有root用户具有该目录下的写权限.此目录和/root目录不同,/root目录是root用户的主目录. 2. /bin - ...

  5. SQL语句(十七)综合练习_分组查询_内嵌查询_视图使用

    Select * from Student Select * From Course Select * from SC --子查询 低于总平均成绩的女同学成绩 Select Grade from St ...

  6. Linux文件系统_每一个的意义

    2017年1月10日, 星期二 Linux文件系统_每一个的意义 rootfs: 根文件系统 FHS:Linux /boot: 系统启动相关的文件,如内核.initrd,以及grub(bootload ...

  7. Github遇到Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.

    警告:为IP地址192.30.252.128的主机(RSA连接的)持久添加到hosts文件中,那就来添加吧! 解决办法: vim /etc/hosts 添加一行:52.74.223.119 githu ...

  8. IOC轻量级框架之Autofac

    http://www.cnblogs.com/WeiGe/p/3871451.html http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041. ...

  9. 20155227 2016-2017-2 《Java程序设计》第四周学习总结

    20155227 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 继承 继承 继承是Java程序设计语言面向对象的又一重要体现,允许子类继承父类,避免重复的行 ...

  10. Tju_Oj_2790Fireworks Show

    这个题主要在于时间复杂度的计算,N是10的6次方,C是10的2次方,OJ系统可接受的时间是10的7次方(室友说是无数先人测出来了┭┮﹏┭┮),所以如果普通遍历的话肯定会超时.而代码中是跳着走了,相当于 ...