1.目的
初步测试与验证连接池的行为.--待扩充
源于一个不正常的日志记录:似乎表现为一个连接仅被固定的线程使用.---从测试结果看不是机制本身,可能是使用的原因.
2.测试代码
int CXboxPlugin::ReadPrivateConfig() {
if (parent::ReadPrivateConfig())
return -1;
if (config_->Open(cf_.c_str())) {
ACE_ERROR_RETURN((LM_ERROR,"open config file %s failure.\n",cf_.c_str()),-1);
}
INode *root = config_->GetChildNodes()->GetChildNodes("config")->GetChildNode(0);
INode *node;
node = root->GetChildNodes()->GetChildNodes("dbc")->GetChildNode(0);
local_dbc_ = (string)*node;
thr_mgr_.spawn_n(10,test_proc); /// 创建10个线程
}
///< 线程函数
ACE_THR_FUNC_RETURN test_proc(void*) {
do {
USENEWDBC(pdbor,CXboxPlugin::instance()->local_dbc_.c_str());
CXboxPlugin::instance()->nlogger_->log(LO_STDOUT|LO_FILE,SEVERITY_INFO,"THREADID=%lu获取到数据库连接id:%lu.\n",GetCurrentThreadId(),pdbor->GetID());
Sleep(10000);
}
return 0;
}
3.测试结果
连接池配置为1个初始连接.插件启动10个线程请求连接.
.不允许连接不够时自动创建(auto_new=false)
<conn constr="Provider=SQLOLEDB.1;Password=sa101;Persist Security Info=True;User ID=sa;Initial Catalog=retail_EE;Data Source=172.23.2.101,1433"
count="1" auto_new="false" name="laton" db_ext="sqlserver_ext.dll"/>
输出日志如下:
[2015-01-04 14:38:10:713][线程8992][2][20][0][]LATON#client使用情况:
[2015-01-04 14:38:10:713][线程8992][2][20][0][][1]连接id=1,使用状态=已使用,取用时间=0(秒),拥有者线程=9064.
[2015-01-04 14:38:10:713][线程9064][2][20][0][]THREADID=9064获取到数据库连接id:1.
[2015-01-04 14:38:20:729][线程8308][2][20][0][]LATON#client使用情况:
[2015-01-04 14:38:20:729][线程8308][2][20][0][][1]连接id=1,使用状态=已使用,取用时间=0(秒),拥有者线程=9064.
[2015-01-04 14:38:20:729][线程9064][2][20][0][]THREADID=9064获取到数据库连接id:1.
[2015-01-04 14:38:30:745][线程9064][2][20][0][]LATON#client使用情况:
[2015-01-04 14:38:30:745][线程9064][2][20][0][][1]连接id=1,使用状态=已使用,取用时间=0(秒),拥有者线程=5804.
[2015-01-04 14:38:30:745][线程5804][2][20][0][]THREADID=5804获取到数据库连接id:1.
[2015-01-04 14:38:40:761][线程5804][2][20][0][]LATON#client使用情况:
[2015-01-04 14:38:40:761][线程5804][2][20][0][][1]连接id=1,使用状态=已使用,取用时间=0(秒),拥有者线程=3284.
[2015-01-04 14:38:40:761][线程3284][2][20][0][]THREADID=3284获取到数据库连接id:1.
.允许自动创建连接(auto_new=true,默认行为)
<conn constr="Provider=SQLOLEDB.1;Password=sa101;Persist Security Info=True;User ID=sa;Initial Catalog=retail_EE;Data Source=172.23.2.101,1433"
count="1" auto_new="true" name="laton" db_ext="sqlserver_ext.dll"/>
输出日志如下:
[2015-01-04 14:36:58:665][线程8464][2][20][0][]THREADID=8464获取到数据库连接id:1.
[2015-01-04 14:36:58:665][线程7024][2][20][0][]THREADID=7024获取到数据库连接id:2.
[2015-01-04 14:36:58:665][线程8268][2][20][0][]THREADID=8268获取到数据库连接id:3.
[2015-01-04 14:36:58:681][线程8984][2][20][0][]THREADID=8984获取到数据库连接id:4.
[2015-01-04 14:36:58:681][线程5084][2][20][0][]THREADID=5084获取到数据库连接id:5.
[2015-01-04 14:36:58:697][线程1688][2][20][0][]THREADID=1688获取到数据库连接id:6.
[2015-01-04 14:36:58:712][线程8616][2][20][0][]THREADID=8616获取到数据库连接id:7.
[2015-01-04 14:36:58:728][线程3176][2][20][0][]THREADID=3176获取到数据库连接id:8.
[2015-01-04 14:36:58:744][线程8540][2][20][0][]THREADID=8540获取到数据库连接id:9.
[2015-01-04 14:36:58:744][线程8844][2][20][0][]THREADID=8844获取到数据库连接id:10.