手寫乙個簡單多連線的mysql連線池

2021-10-02 04:27:41 字數 2979 閱讀 7087

本教程是手寫乙個對應多個mysql連線位址的連線池,即每乙個連線url都有屬於自己的連線池,當url初次訪問時建立連線池,每個url和使用者名稱鎖定乙個連線池。

從本教程可以學到,連線池的基本思想,以及併發下如何保證連線池的建立以及訪問安全

應用場景:前端傳進來url,使用者名稱,和密碼,然後輸入sql直接進行查詢,相當於乙個小工具,可以連線不同mysql資料庫進行sql語句查詢,並為不同連線建立相應的連線池,這種做法只適用於不同連線數不多的情況,如果不同連線太多的話,每個連線對應乙個連線池,而且每個連線的使用次數並不多的話,這樣會造成空間的浪費,需要對這些連線池做定期的清理

各位有好的建議都可以歡迎提出哈

/**

* @description: mysql連線池(單個url+user)

* @author jarbein

* @date 2020/1/13 14:41

*/public

class

mysqldatasource

catch

(classnotfoundexception e)

}public

void

createdatasource

(string url,string user,string password)

catch

(exception e)

} system.out.

println

("成功建立url為"

+ url +

"_"+ user +

"的連線池");

//盡量減小資料庫壓力,連線池建立後,再有新連線時,通過這裡的密碼進行校驗

this

.url = url;

this

.user = user;

this

.password = password;

}//下邊加synchronized用於併發獲取連線的執行緒安全

public

synchronized connection getconnection()

throws sqlexception

catch

(nosuchelementexception n)

catch

(exception e)

return connection;

}//同時釋放執行緒同樣加synchronized,因為linkedlist並不是執行緒安全的

public

synchronized

void

releaseconnection

(connection conn)

public string geturl()

public string getuser()

public string getpassword()

}

/**

* @description: 管理多個連線池(不同的url+user對應不同的連線池)

* @author jarbein

* @date 2020/1/13 14:45

*/public

class

datasourceutil

else

}//通過key獲取連線池

public

static mysqldatasource getdatasource

(string key)

//建立連線池

public

static mysqldatasource createdatasource

(string url, string user, string password)

}

這個類才是我們應該直接呼叫的類,我們對資料層操作時只需要對這個類進行呼叫獲取連線,關閉連線就行了,拿到連線就可以進行操作了

/**

* @description: 我們獲取連線只需要呼叫這個類就行了

* @author jarbein

* @date 2020/1/13 16:07

*/public

class

connectionutils

conn = datasource.

getconnection()

;}else

conn = datasource.

getconnection()

;}else}}

return conn;

}/**

* 關閉資源

*/public

static

void

close

(string url,string user,resultset resultset, statement statement, connection connection)

catch

(sqlexception e)}if

(statement != null)

catch

(sqlexception e)

}//將連線放回到對應的連線池中

if(connection != null)

}}

這個工具類主要是對應前端傳來url,user,password和相應的sql查詢語句,我已經把核心**連線池給實現了,其它**就是對連線進行操作了,然後通過壓測可以看出1s內1000請求是沒有問題的,而且後端控制台輸出正常

結果:

可以看出最終執行完連線都成功回到了連線池中

手寫乙個簡單的HashMap

package com.lzq.mapinte ce public inte ce map package com.lzq.hashmap public class entry 編寫hashmap類 package com.lzq.hashmap import com.lzq.mapinte ce....

動手寫乙個簡單的promise

promise 是非同步程式設計的一種解決方案,比傳統的解決方案 函式和事件 更合理和更強大。它由社群最早提出和實現,es6 將其寫進了語言標準,統一了用法,原生提供了promise物件。所謂promise,簡單說就是乙個容器,裡面儲存著某個未來才會結束的事件 通常是乙個非同步操作 的結果。從語法上...

怎麼手寫乙個簡單的List集合

list集合 手寫乙個簡單的list集合為自己呼叫並不是特別難,只需要定義乙個集合介面去提供所有方法的定義 如下 package com.myself.util public inte ce list 我們只需要去將自己需要的方法定義新增到介面中,由我們去提供實現類去實現該介面 從而可以使用乙個簡單...