#pragma once
|
#include "MysqlConn.h"
|
#include "./tinyxml/tinyxml.h"
|
#include <queue>
|
#include <mutex>
|
#include <thread>
|
#include <atomic>
|
#include <condition_variable>
|
|
|
#pragma comment(lib, "./tinyxml/x64/Debug/tinyxml.lib")
|
|
// Ó¦ÓÃ-µ¥Àýģʽ£ºÀÁººÄ£Ê½[ÐèÒª¿¼ÂǶàḬ̈߳²È«ÎÊÌâ]
|
class ConnectionPool
|
{
|
private:
|
ConnectionPool();
|
// ÒÆ¶¯¿½±´×îÖÕ»¹ÊÇÓÐÇÒ½öÓÐÒ»¸ö¶ÔÏó£¬ËùÒÔÒÀ¾ÉÊÇÊôÓÚµ¥Àýģʽ¡£
|
// delete ×èÖ¹¿½±´¹¹ÔìºÍ¿½±´¸³ÖµµÄÀà¶ÔÏóÉú³É
|
ConnectionPool(ConnectionPool&) = delete;
|
ConnectionPool& operator=(ConnectionPool&) = delete;
|
~ConnectionPool();
|
// ½âÎöxmlÅäÖÃÎļþ ¶ÁÈ¡Êý¾Ý¿â¼°Á¬½Ó³ØµÄÏà¹ØÐÅÏ¢
|
bool parseXmlFile();
|
// Ìí¼ÓÁ¬½Ó
|
bool addConnection();
|
// Ï̺߳¯Êý
|
void productConnection();
|
void recycleConnection();
|
|
// ´æ·ÅÊý¾Ý¿âÁ¬½Ó³Ø½¨Á¢µÄÁ¬½Ó
|
queue<MysqlConn*> m_connections;
|
// һЩ»ù±¾ÐÅÏ¢
|
string m_ip; // IP
|
unsigned short m_port; // ¶Ë¿Ú
|
string m_user; // Óû§Ãû
|
string m_passwd; // ÃÜÂë
|
string m_dbName; // Êý¾Ý¿âÃû³Æ
|
int m_minSize; // ³õʼÁ¬½ÓÁ¿(×îСÁ¬½ÓÁ¿)
|
int m_maxSize; // ×î´óÁ¬½ÓÁ¿
|
int m_timeout; // ³¬Ê±Ê±³¤
|
int m_maxIdleTime; // ×î´ó¿ÕÏÐʱ³¤
|
// Ḭ̈߳²È«Ïà¹Ø
|
mutex m_mutex;
|
condition_variable m_cond; // ½öÓÃÒ»¸öÌõ¼þ±äÁ¿À´»½ÐÑỊ̈߳¬µ«²¢²»Ó°ÏìÏß³ÌÔËÐÐ
|
condition_variable m_cond1;
|
// Á¬½ÓÊýÁ¿
|
atomic_int m_num; // Á¬½ÓµÄ×ÜÊýÁ¿
|
public:
|
// »ñÈ¡µ¥Àý¶ÔÏóµÄ½Ó¿Ú
|
static ConnectionPool* getConnectPool();
|
// Óû§»ñÈ¡Á¬½ÓµÄ½Ó¿Ú, Èç¹û»ñȡʧ°Ü£¬»á·µ»Ønullptr
|
shared_ptr<MysqlConn> getConnection();
|
};
|