本教程是手寫乙個對應多個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 我們只需要去將自己需要的方法定義新增到介面中,由我們去提供實現類去實現該介面 從而可以使用乙個簡單...