WangSql 3.0源码共享(WangSql 1.0重大升级到3.0)

WangSql 1.0博文阅读: http://www.cnblogs.com/deeround/p/6204610.html

基于1.0做了以下重大改动:

1.多数据实现方式调整

2.使用EmitMapper代替反射实现DbDataReader转实体

3.源码在文章最后提供下载地址

核心功能介绍

多数据支持,采用配置文件形式实现多种数据实现,只需要指定数据库驱动即可实现所支持所有数据库任意切换。

SQL自行管理,大大提高SQL可控性以及SQL性能优化。

高效实体转换,集成EmitMapper来实现DbDataReader转实体。

实现分页查询,可自行重写生成分页语句方法和获取总数语句方法。

接口列表(ISqlExe)

原始方法

int ExecuteNonQuery(string sql);

int ExecuteNonQuery(string sql, IDbDataParameter par);

int ExecuteNonQuery(string sql, IDbDataParameter[] par);

IDataReader ExecuteReader(string sql);

IDataReader ExecuteReader(string sql, IDbDataParameter par);

IDataReader ExecuteReader(string sql, IDbDataParameter[] par);

DataTable ExecuteTable(string sql);

DataTable ExecuteTable(string sql, IDataParameter par);

DataTable ExecuteTable(string sql, IDataParameter[] par);

基本方法

int NonQuery(string sql);

int NonQuery(string sql, object para);

T QueryObject<T>(string sql);

T QueryObject<T>(string sql, object para);

IList<T> QueryList<T>(string sql);

IList<T> QueryList<T>(string sql, object para);

DataTable QueryTable(string sql);

DataTable QueryTable(string sql, object para);

分页方法

IList<T> QueryPage<T>(string sql, int pageIndex, int pageSize, out int totalCount);

DataTable QueryPage(string sql, int pageIndex, int pageSize, out int totalCount);

IList<T> QueryPage<T>(string sql, object para, int pageIndex, int pageSize, out int totalCount);

DataTable QueryPage(string sql, object para, int pageIndex, int pageSize, out int totalCount);

string CreateSqlPageTag(SqlRequest sqlRequest, int pageIndex, int pageSize);

string CreateSqlCountTag(SqlRequest sqlRequest);

事务方法

bool Transaction(Hashtable sqlList);

IMyTransaction BeginTransaction();

其他方法

SqlRequest GetRunSqlRequest(string sql);

SqlRequest GetRunSqlRequest(string sql, object para);

事务接口列表(IMyTransaction)

void Commit();

void Rollback();

int NonQuery(string sql);

int NonQuery(string sql, object para);

T QueryObject<T>(string sql);

T QueryObject<T>(string sql, object para);

IList<T> QueryList<T>(string sql);

IList<T> QueryList<T>(string sql, object para);

DataTable QueryTable(string sql);

DataTable QueryTable(string sql, object para);

具体使用方法参考1.0或者下载源码,里面有测试项目。

WangSql 1.0博文阅读: http://www.cnblogs.com/deeround/p/6204610.html

测试代码

        static void TestStart()
        {
            Write("================测试开始==================");

            string rootPath = System.AppDomain.CurrentDomain.BaseDirectory;
            rootPath = rootPath.TrimEnd(‘\\‘);
            rootPath = rootPath.Substring(0, rootPath.LastIndexOf(‘\\‘));
            rootPath = rootPath.Substring(0, rootPath.LastIndexOf(‘\\‘));
            string conn = string.Format(@"Data Source={0}\db3;", rootPath);
            var sqlExe = new TestSqlExe("SQLite3", conn);
            sqlExe.Factory.ProviderConfig(rootPath + "\\providers.config");

            ////Sql Server
            //conn = "Data Source = WIN-L8TOD2M74CD\\SQLEXPRESS;Initial Catalog = test;User Id = sa;Password = 123456;";
            //sqlExe = new TestSqlExe("sqlServer1.1", conn);

            Write("初始化完成");

            string id = string.Empty;

            #region insert
            Write("*********** insert 开始 *************");
            for (int i = 0; i < 10; i++)
            {
                var site = new Site()
                {
                    Id = Guid.NewGuid().ToString("N"),
                    Name = "site1",
                    DomainEWQ = "www.baidu.com" + Guid.NewGuid().ToString("N"),
                    Area = "web",
                    Remark = "测试"
                };
                id = site.Id;
                string sqlInsert = "insert into Site(Id,Name,Domain,Area,Remark) values(‘$Id$‘,#Name#,‘$Domain$‘,#Area#,#Remark#)";
                var resultInsert = sqlExe.NonQuery(sqlInsert, site);
                Write("插入第" + (i + 1) + "条,插入结果:" + resultInsert);
            }
            Write("*********** insert 通过 *************");
            #endregion

            #region update
            Write("*********** update 开始 *************");
            string sqlUpdate = "update Site set Remark=#Remark# where Id=#Id#";
            var site1 = new Site()
            {
                Remark = "测试1",
                Id = id
            };
            var resultUpdate = sqlExe.NonQuery(sqlUpdate, site1);
            Write("更新结果:" + resultUpdate);
            Write("*********** update 通过 *************");
            #endregion

            #region select
            Write("*********** select 开始 *************");
            string sqlSelect = "select * from Site";
            var resultSelect = sqlExe.QueryObject<Site>(sqlSelect);
            Write("查询结果:" + resultSelect.DomainEWQ);
            var resultSelect1 = sqlExe.QueryList<Site>(sqlSelect);
            Write("查询结果:" + resultSelect1.Count);

            int count = 0;
            var resultSelect2 = sqlExe.QueryPage<Site>(sqlSelect, 1, 4, out count);
            Write("分页查询结果:" + resultSelect2.Count + ",总数:" + count);
            Write("*********** select 通过 *************");
            #endregion

            #region trans
            Write("*********** trans 开始 *************");
            using (var trans = sqlExe.BeginTransaction())
            {
                try
                {
                    string sqlTrans1 = "update Site set Remark=#Remark# where Id=#Id#";
                    var site2 = new Site()
                    {
                        Remark = "测试2",
                        Id = id
                    };
                    var result1 = trans.NonQuery(sqlTrans1, site1);
                    Write("trans NonQuery1结果:" + result1);

                    string sqlTrans2 = "update Site set Name=#Name# where Id=#Id#";
                    var site3 = new Site()
                    {
                        Name = "SASASA3",
                        Id = id
                    };
                    var result2 = trans.NonQuery(sqlTrans2, site1);
                    Write("trans NonQuery2结果:" + result2);

                    trans.Commit();
                }
                catch
                {
                    trans.Rollback();
                }
            }
            Write("*********** trans 通过 *************");
            #endregion

            #region delete
            Write("*********** delete 开始 *************");
            string sqlDelete = "delete from Site where Id=#Id#";
            var resultDelete = sqlExe.NonQuery(sqlDelete, id);
            Write("删除一条结果:" + resultDelete);
            string sqlDelete1 = "delete from Site";
            var resultDelete1 = sqlExe.NonQuery(sqlDelete1);
            Write("删除全部结果:" + resultDelete1);//SQLite3删除全部返回是0,不知道是不是这个驱动的BUG,其他数据库不会
            Write("*********** delete 通过 *************");
            #endregion

            Write("================测试通过==================");
        }

驱动配置文件

<?xml version="1.0" encoding="utf-8"?>
<providers>
  <provider
    name="sqlServer1.0"
    description="Microsoft SQL Server 7.0/2000, provider V1.0.3300.0 in framework .NET V1.0"
    enabled="false"
    assemblyName="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection"
    commandClass="System.Data.SqlClient.SqlCommand"
    parameterClass="System.Data.SqlClient.SqlParameter"
    parameterDbTypeClass="System.Data.SqlDbType"
    parameterDbTypeProperty="SqlDbType"
    dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
    commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix="@"/>
  <provider
    name="sqlServer1.1"
    description="Microsoft SQL Server 7.0/2000, provider V1.0.5000.0 in framework .NET V1.1"
    enabled="false"
    assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection"
    commandClass="System.Data.SqlClient.SqlCommand"
    parameterClass="System.Data.SqlClient.SqlParameter"
    parameterDbTypeClass="System.Data.SqlDbType"
    parameterDbTypeProperty="SqlDbType"
    dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
    commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix="@"
    queryPageTag="select wang1.*
                  from(
                    select row_number() over(order by (select 0)) as rowno,wang.*
                    from
                    (
                      {sqlTag}
                    ) wang
                  ) wang1
                  where wang1.rowno between {pageStart} and {pageEnd}"/>
  <provider
    name="sqlServer2.0"
    enabled="false"
    description="Microsoft SQL Server 2005, provider V2.0.50215.0 in framework .NET V2.0"
    assemblyName="System.Data, Version=2.0.50215.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    connectionClass="System.Data.SqlClient.SqlConnection"
    commandClass="System.Data.SqlClient.SqlCommand"
    parameterClass="System.Data.SqlClient.SqlParameter"
    parameterDbTypeClass="System.Data.SqlDbType"
    parameterDbTypeProperty="SqlDbType"
    dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
    commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
    usePositionalParameters = "false"
    useParameterPrefixInSql = "true"
    useParameterPrefixInParameter = "true"
    parameterPrefix="@"/>
  <provider name="OleDb1.1"
    description="OleDb, provider V1.0.5000.0 in framework .NET V1.1"
    enabled="false"
    assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OleDb.OleDbConnection"
    commandClass="System.Data.OleDb.OleDbCommand"
    parameterClass="System.Data.OleDb.OleDbParameter"
    parameterDbTypeClass="System.Data.OleDb.OleDbType"
    parameterDbTypeProperty="OleDbType"
    dataAdapterClass="System.Data.OleDb.OleDbDataAdapter"
    commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder"
    usePositionalParameters="true"
    useParameterPrefixInSql="false"
    useParameterPrefixInParameter="false"
    parameterPrefix=""/>
  <provider
    name="Odbc1.1"
    description="Odbc, provider V1.0.5000.0 in framework .NET V1.1"
    enabled="false"
    assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.Odbc.OdbcConnection"
    commandClass="System.Data.Odbc.OdbcCommand"
    parameterClass="System.Data.Odbc.OdbcParameter"
    parameterDbTypeClass="System.Data.Odbc.OdbcType"
    parameterDbTypeProperty="OdbcType"
    dataAdapterClass="System.Data.Odbc.OdbcDataAdapter"
    commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder"
    usePositionalParameters="true"
    useParameterPrefixInSql="false"
    useParameterPrefixInParameter="false"
    parameterPrefix="@"/>
  <provider
    name="oracle9.2"
    description="Oracle, Oracle provider V9.2.0.401"
    enabled="false"
    assemblyName="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"
    commandClass="Oracle.DataAccess.Client.OracleCommand"
    parameterClass="Oracle.DataAccess.Client.OracleParameter"
    parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"
    parameterDbTypeProperty="OracleDbType"
    dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"
    commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="false"
    parameterPrefix=":"
    useDeriveParameters="false"/>
  <provider
    name="oracle10.1"
    description="Oracle, oracle provider V10.1.0.301"
    enabled="false"
    assemblyName="Oracle.DataAccess, Version=10.1.0.301, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"
    commandClass="Oracle.DataAccess.Client.OracleCommand"
    parameterClass="Oracle.DataAccess.Client.OracleParameter"
    parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"
    parameterDbTypeProperty="OracleDbType"
    dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"
    commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"
    usePositionalParameters="true"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix=":"
    useDeriveParameters="false"
    queryPageTag="select wang1.*
                  from(
                    select rownum as rowno,wang.*
                    from
                    (
                      {sqlTag}
                    ) wang
                  ) wang1
                  where wang1.rowno between {pageStart} and {pageEnd}"/>
  <provider
    name="oracleClient1.0"
    description="Oracle, Microsoft provider V1.0.5000.0"
    enabled="false"
    assemblyName="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OracleClient.OracleConnection"
    commandClass="System.Data.OracleClient.OracleCommand"
    parameterClass="System.Data.OracleClient.OracleParameter"
    parameterDbTypeClass="System.Data.OracleClient.OracleType"
    parameterDbTypeProperty="OracleType"
    dataAdapterClass="System.Data.OracleClient.OracleDataAdapter"
    commandBuilderClass="System.Data.OracleClient.OracleCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="false"
    parameterPrefix=":"/>
  <provider
    name="ByteFx"
    description="MySQL, ByteFx provider V0.7.6.15073"
    enabled="false"
    assemblyName="ByteFX.MySqlClient, Version=0.7.6.15073, Culture=neutral, PublicKeyToken=f2fef6fed1732fc1" connectionClass="ByteFX.Data.MySqlClient.MySqlConnection"
    commandClass="ByteFX.Data.MySqlClient.MySqlCommand"
    parameterClass="ByteFX.Data.MySqlClient.MySqlParameter"
    parameterDbTypeClass="ByteFX.Data.MySqlClient.MySqlDbType"
    parameterDbTypeProperty="MySqlDbType"
    dataAdapterClass="ByteFX.Data.MySqlClient.MySqlDataAdapter"
    commandBuilderClass="ByteFX.Data.MySqlClient.MySqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix="@"/>
  <provider
    name="MySql"
    description="MySQL, MySQL provider V1.0.5.13785"
    enabled="false"
    assemblyName="MySql.Data, Version=1.0.5.13785, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection"
    commandClass="MySql.Data.MySqlClient.MySqlCommand"
    parameterClass="MySql.Data.MySqlClient.MySqlParameter"
    parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"
    parameterDbTypeProperty="MySqlDbType"
    dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"
    commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix="?"
    queryPageTag="select wang.* from ({sqlTag}) wang limit {pageIndex},{pageSize}"/>
  <provider name="SQLite3"
    description="SQLite, System.Data.SQLite provider V1.0.60.0"
    enabled="false"
    assemblyName="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"
    connectionClass="System.Data.SQLite.SQLiteConnection"
    commandClass="System.Data.SQLite.SQLiteCommand"
    parameterClass="System.Data.SQLite.SQLiteParameter"
    parameterDbTypeClass="System.Data.DbType, System.Data"
    parameterDbTypeProperty="DbType"
    dataAdapterClass="System.Data.SQLite.SQLiteDataAdapter"
    commandBuilderClass="System.Data.SQLite.SQLiteCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix="@"
    setDbParameterPrecision="false"
    setDbParameterScale="false"
    queryPageTag="select wang.* from ({sqlTag}) wang limit {pageIndex},{pageSize}"/>
  <provider name="Finisar"
    description="SQLite, SQLite.NET provider V0.21.1869.3794"
    enabled="false"
    assemblyName="SQLite.NET, Version=0.21.1869.3794, Culture=neutral, PublicKeyToken=c273bd375e695f9c"
    connectionClass="Finisar.SQLite.SQLiteConnection"
    commandClass="Finisar.SQLite.SQLiteCommand"
    parameterClass="Finisar.SQLite.SQLiteParameter"
    parameterDbTypeClass="System.Data.DbType, System.Data"
    parameterDbTypeProperty="DbType"
    dataAdapterClass="Finisar.SQLite.SQLiteDataAdapter"
    commandBuilderClass="Finisar.SQLite.SQLiteCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix="@"
    setDbParameterPrecision="false"
    setDbParameterScale="false"/>
  <provider
    name="Firebird1.7"
    description="Firebird, Firebird SQL .NET provider V1.7.0.33200"
    enabled="false"
    assemblyName="FirebirdSql.Data.Firebird, Version=1.7.0.33200, Culture=neutral, PublicKeyToken=fa843d180294369d" connectionClass="FirebirdSql.Data.Firebird.FbConnection"
    commandClass="FirebirdSql.Data.Firebird.FbCommand"
    parameterClass="FirebirdSql.Data.Firebird.FbParameter"
    parameterDbTypeClass="FirebirdSql.Data.Firebird.FbDbType"
    parameterDbTypeProperty="FbDbType"
    dataAdapterClass="FirebirdSql.Data.Firebird.FbDataAdapter"
    commandBuilderClass="FirebirdSql.Data.Firebird.FbCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix="@"/>
  <provider
    name="PostgreSql0.7"
    description="PostgreSql, Npgsql provider V0.7.0.0"
    enabled="false"
    assemblyName="Npgsql, Version=0.7.0.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
    connectionClass="Npgsql.NpgsqlConnection"
    commandClass="Npgsql.NpgsqlCommand"
    parameterClass="Npgsql.NpgsqlParameter"
    parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"
    parameterDbTypeProperty="NpgsqlDbType"
    dataAdapterClass="Npgsql.NpgsqlDataAdapter"
    commandBuilderClass="Npgsql.NpgsqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix=":"/>
  <provider
    name="PostgreSql0.7.1"
    description="PostgreSql, Npgsql provider V0.7.1.0"
    enabled="false"
    assemblyName="Npgsql, Version=0.7.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
    connectionClass="Npgsql.NpgsqlConnection"
    commandClass="Npgsql.NpgsqlCommand"
    parameterClass="Npgsql.NpgsqlParameter"
    parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"
    parameterDbTypeProperty="NpgsqlDbType"
    dataAdapterClass="Npgsql.NpgsqlDataAdapter"
    commandBuilderClass="Npgsql.NpgsqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix=":"/>
  <provider
    name="iDb2.10"
    description="IBM DB2 Provider, V 10.0"
    enabled="false"
    assemblyName="IBM.Data.DB2.iSeries, Version=10.0.0.0,Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26, Custom=null" connectionClass="IBM.Data.DB2.iSeries.iDB2Connection"
    commandClass="IBM.Data.DB2.iSeries.iDB2Command"
    parameterClass="IBM.Data.DB2.iSeries.iDB2Parameter"
    parameterDbTypeClass="IBM.Data.DB2.iSeries.iDB2DbType"
    parameterDbTypeProperty="iDB2DbType"
    dataAdapterClass="IBM.Data.DB2.iSeries.iDB2DataAdapter"
    commandBuilderClass="IBM.Data.DB2.iSeries.iDB2CommandBuilder"
    usePositionalParameters="true"
    useParameterPrefixInSql="false"
    useParameterPrefixInParameter="false"
    parameterPrefix=""/>
  <provider
    name="Informix"
    description="Informix NET Provider, 2.81.0.0"
    enabled="false"
    assemblyName="IBM.Data.Informix, Version=2.81.0.0, Culture=neutral, PublicKeyToken=7c307b91aa13d208"
    connectionClass="IBM.Data.Informix.IfxConnection"
    commandClass="IBM.Data.Informix.IfxCommand"
    parameterClass="IBM.Data.Informix.IfxParameter"
    parameterDbTypeClass="IBM.Data.Informix.IfxType"
    parameterDbTypeProperty="IfxType"
    dataAdapterClass="IBM.Data.Informix.IfxDataAdapter"
    commandBuilderClass="IBM.Data.Informix.IfxCommandBuilder"
    usePositionalParameters = "true"
    useParameterPrefixInSql = "false"
    useParameterPrefixInParameter = "false"
    useDeriveParameters="false"/>
</providers>

源码下载WangSql3.0源码_千年.rar

时间: 2024-08-05 19:32:31

WangSql 3.0源码共享(WangSql 1.0重大升级到3.0)的相关文章

WangSql 1.0源码共享

一,项目背景 现在基本上大大小小的项目都需要和数据库打交道,自然而然数据库操作会有很多地方,而使用传统ADO.NET整个流程有点麻烦,出参都需要手动转换为对象.基于以上,我们需要一个SQL执行工具,能简化上诉步骤,而不失对SQL控制权. 二,核心技术 最底层是ADO.NET,基于ADO.NET开发的工具. 1.支持多数据库 2.支持增删改查事务过程等常用SQL操作 3.支持参数统一化 4.支持入参多样化,且自动转换成SQL参数 5.支持出参多样化,且自动转换成对象 6.缓存方案(未完成) 7.并

AFNetworking 3.0 源码解读(四)之 AFURLResponseSerialization

本篇是AFNetworking 3.0 源码解读的第四篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3.0 源码解读(二)之 AFSecurityPolicy AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization 这次主要讲AFURLResponseSerialization(HTTP响应)这一个类的知识. 这是一个协议,只要遵守这个协议,就要实现N

Tomcat7.0源码分析——启动与停止服务

前言 熟悉Tomcat的工程师们,肯定都知道Tomcat是如何启动与停止的.对于startup.sh.startup.bat.shutdown.sh.shutdown.bat等脚本或者批处理命令,大家一定知道改如何使用它,但是它们究竟是如何实现的,尤其是shutdown.sh脚本(或者shutdown.bat)究竟是如何和Tomcat进程通信的呢?本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程. 由于在生产环境中,Tomcat一般部署在Linux系统下,所以本文将以startup.s

最近建了一个.net源码共享群,群共享有大量网友分享的.net(C#)商业源码

.net源码共享群 324087998. 本群创建于2013/6/21: 群里都是.net(C#)程序开发人员,群共享有大量网友分享的.net(C#)商业源码.比如:DTCMS旗舰版,hishop微分销,shopnum微分销,多用户微信公众平台开发,力软信息化快速开发框架.源码研究,源码共享,.net反编译破解,.net破解反编译,技术研究交流! 之前在CSDN上发了一下,现在群里有六七百人了.马上就满员了,第二个群又要开始了.群友都是很活跃的,现在群等级满级了. 这是之前文章内容: 由于工作需

云帆大数据学院_hadoop 2.2.0源码编译

2.1下载地址 1.ApacheHadoop(100%永久开源)下载地址: - http://hadoop.apache.org/releases.html - SVN:http://svn.apache.org/repos/asf/hadoop/common/branches/ 2.CDH(ClouderaDistributed Hadoop,100%永久开源)下载地址: - http://archive.cloudera.com/cdh4/cdh/4/(是tar.gz文件!) - http:

Tomcat7.0源码分析——启动与停止服务原理

前言 熟悉Tomcat的工程师们,肯定都知道Tomcat是如何启动与停止的.对于startup.sh.startup.bat.shutdown.sh.shutdown.bat等脚本或者批处理命令,大家一定知道改如何使用它,但是它们究竟是如何实现的,尤其是shutdown.sh脚本(或者shutdown.bat)究竟是如何和Tomcat进程通信的呢?本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程. 由于在生产环境中,Tomcat一般部署在Linux系统下,所以本文将以startup.s

【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/51592930 手机的两种模式 : 在下面有详细的图片示例; -- Recovery 模式 : 音量键增加 + 电源键, 长按上述组合键, 看到 "MI" 的 LOGO 后即进入 Recovery 模式; -- Fastboot 模式 : 音量键减小 + 电源键, 长按上述组合键, 看到 "FASTBOOT" 后, 即 进入 FA

打造自己的视频会议系统 -- 原理篇 (附送GGMeeting 1.0 源码)

自从在博客园发布广域网即时通信系统GG(QQ高仿版)以来,结识了很多做IM的朋友,然后我和我的伙伴们也接到了很多与IM相关的项目.相比在发布GG之前难以接到项目的状况相比,现在简直太幸福了,虽然做项目很辛苦,但毕竟有钱赚,那辛苦也值了. 饮水思源,这里要感谢博客园提供了这么好的一个平台,让我们能展现自己的实力,提升我们的知名度,然后才能接到了更多项目.所以,我强烈建议那些希望接项目.接私单的朋友,都来博客园写博客吧,写出自己的知名度后,真是好处多多! 言归正传,前段时间做了个在线教育培训的项目,

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三)

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及PeerSync策略.本文以及后续的文章将重点介绍Replication策略.Replication策略不但可以在SolrCloud中起到leader到replica的数据同步,也可以在用多个单独的Solr来实现主从同步.本文先介绍在SolrCloud的leader到replica的数据同步,下一篇