DBConnectionPool 代表單一資料庫連線池,擁有名稱、JDBC URL、使用者帳密、最大連線數。可為不同權限操作建立同 URL 不同帳密的多個池。
public DBConnectionPool(String name, String URL, String user,
String password, int maxConn) {
this.name = name; this.URL = URL; this.user = user;
this.password = password; this.maxConn = maxConn;
}
同步方法,從 freeConnections Vector 取得閒置連線(採 round-robin:取首元素、歸還加尾端,減少連線閒置被資料庫斷開風險)。檢查 isClosed(),無效則遞歸重試。若無閒置連線且未達上限(maxConn==0 表無限制),呼叫 newConnection() 建立新連線;否則回傳 null。
private Connection newConnection() {
try {
if (user == null) con = DriverManager.getConnection(URL);
else con = DriverManager.getConnection(URL, user, password);
log("Created a new connection in pool " + name);
} catch (SQLException e) {
log(e, "Can not create a new connection for " + URL);
return null;
}
return con;
}
核心邏輯:閒置連線重用、有效性檢查、上限控制、帳密驗證,構成健全的連線池基礎。