在做系统优化的时候师哥给我们提了一个连接池的概念,问我们有没有配置,我对这个概念一无所知,于是进行了一些研究,连接池有很多,比如WCF、EF还有数据库、CAS也可以配连接池,这些连接池用通俗的语言来说就是一个池子,池子里的资源可以收放自如,不用的时候可以立即收回,和我们通常用到USing的作用有些相似,就是可以自动的释放connection资源。
数据库中连接池的配置如下:
<span style="font-size:14px;"> </span><strong><span style="font-size:18px;"> stringconStr ="server=127.0.0.1.;uid=sa;pwd=tcaccp;database=pubs;pooling=true;min pool size=5;max pool size=10".</span></strong>
其中 pooling 表示是否打开连接池,默认为打开,关掉时需要 pooling = false;
min pool size 表示连接池最少保存几个连接对象;
max pool size 表示连接池最多保存几个连接对象。(最大值不能为 0,也不能小于最小值);
最大连接数表示同时刻最多允许的访问的数量,可以起到保护站点的作用;最小表示即使没有访问也会打开几个连接。
下面是段关于using的代码:
using (SqlBulkCopy sqlBC = new SqlBulkCopy(sqlConn))
{
//設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。
//设置要批量写入的表
sqlBC.DestinationTableName = tableName;
//自定义的datatable和数据库的字段进行对应
//sqlBC.ColumnMappings.Add("id", "tel");
//sqlBC.ColumnMappings.Add("name", "neirong");
for (int i = 0; i < dtColum.Count; i++)
{
sqlBC.ColumnMappings.Add(dtColum[i].ColumnName.ToString(), dtColum[i].ColumnName.ToString());
}
//批量写入
sqlBC.WriteToServer(dt);
}
这里用了using,自动关闭连接,不光能导入命名空间,还能在程序体内,局部使用某个对象。像上边代码,sqlCon 的作用域只有 using 对应的大括弧这么大。更神奇的是,using 可以在对象作用域结束时,自动调用 sqlCon.Dispose()将对象释放,所以以上代码中,没有 sqlCon.Close() 和 sqlCon.Dispose(),同样可以释放资源,放回连接池。
上面说的是关于数据库连接池的一些配置,下面说下Tomcat连接池的配置,因为在用单点登录的时候需要将服务端搭到Tomcat中,而我们在测试的时候发现登录很慢,于是我也搜了一些关于Tomcat连接池的配置:
1.所有的tomcat项目共用一个连接池配置:在tomcat6->conf->context.xml文件中,在<context></context>之间添加
<Context>
<Resource name="jdbc/mengshan"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdel="10"
maxWait="1000"
username="root"
password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/test"
>
</Resource>
</Context>
然后 web.xml中的<web-app></web-app>添加:
<resource-ref>
<res-ref-name>jdbc/mengshan </res-ref-name>
<res-type>javax.sql.DataSource </res-type>
<res-auth>Container</res-auth>
</resource-ref>
这些连接池配置的原理其实是一样的,只是放到了不用的情景下。希望和大家交流!