mybatis中連線池的實現
阿新 • • 發佈:2021-01-15
資料庫連線池即:
初始化多個連線,當需要獲取連線,直接從連線池中去取,而不需要經過建立連線,進行操作,關閉連線等一系列操作,當用戶量到達一定程度,連線池中的連線被用完時,程式又會自動補充獲取固定數量的連線,當用戶量減少時,程式會自動關閉多餘的連線,直到剩下最後預設初始化的幾個連線存在。
java程式碼簡單實現如下:
public class MyPool {
private static Logger log = Logger.getLogger(MyPool.class);
private Configuration configuration;
private int initCount = 10; //初始化連線數量
private int newCount = 10; //新增的數量
private int maxCount = 100; //最大連線數
private int count = 0; //當前總數量
private LinkedList<Connection> pools = new LinkedList(); //池子,用於存放連線
static{
try {
Class.forName("com.mysql.jdbc.Driver" );
} catch (ClassNotFoundException e) {
log.error("驅動類沒找到,請檢查依賴是否正確匯入");
e.printStackTrace();
}
}
public MyPool(Configuration configuration) {
try {
log.info("正在初始化連線池,數量為:" + initCount );
this.configuration = configuration;
for (int i = 0; i < initCount; i++) {
Connection connection = createConnection();
log.debug(connection.toString());
count++;
pools.add(connection);
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 建立連線
* @return
*/
private Connection createConnection() throws Exception {
if (count>=maxCount) {
throw new Exception("已達到最大連線數");
}
return DriverManager.getConnection(configuration.getUrl(), configuration.getUsername(), configuration.getPassword());
}
/**
* 獲取連線
* @return
*/
public Connection getConnection() throws Exception {
log.debug("連線池數量:" + pools.size() + ", 總連線數:" + count);
if (pools.size()<=0) {
//如果池子中沒有連線,則建立新連線
for (int i = 0; i < newCount; i++) {
Connection connection = createConnection();
//將創建出來的連線放入池子中
count++;
log.debug("新建連線:" +connection);
pools.add(connection);
}
}
//從池子中獲取一個連線
Connection connection = pools.getFirst();
//從池子中移除一個連線,表示該連線已經有人使用了
pools.remove(connection);
return connection;
}
/**
* 關閉連線
* @param connection
*/
public void close(Connection connection){
pools.add(connection);
}
}