本文深入解析 DBConnectionManager 類別的單例模式實作、初始化流程、驅動程式載入、連線池建立與配置檔案格式。
private DBConnectionManager() { init(); }
static synchronized public DBConnectionManager getInstance() {
if (instance == null) instance = new DBConnectionManager();
clients++;
return instance;
}
私有建構子、同步靜態工廠方法、客戶端計數器協調資源釋放時機。
getResourceAsStream("/db.properties") 讀取配置檔(從 classpath 根目錄)Properties 物件,設定日誌檔(預設 DBConnectionManager.log)loadDrivers() 註冊 JDBC 驅動程式createPools() 建立連線池drivers=sun.jdbc.odbc.JdbcOdbcDriver jdbc.idbDriver
logfile=D:\\user\\src\\java\\DBConnectionManager\\log.txt
idb.url=jdbc:idb:c:\\local\\javawebserver1.1\\db\\db.prp
idb.maxconn=2
access.url=jdbc:odbc:demo
access.user=demo
access.password=demopw
屬性說明:drivers(空白分隔驅動類別)、logfile、各連線池以名稱為前綴:<poolname>.url(必填)、.maxconn(0=無限制)、.user、.password。Windows 路徑反斜線需雙寫。
使用 StringTokenizer 解析 drivers 屬性,逐一 Class.forName().newInstance() 載入、向 DriverManager 註冊,並加入私有 drivers Vector 供後續反註冊用。
枚舉所有屬性名,以 .url 結尾者識別為連線池定義,解析參數後實例化 DBConnectionPool,存入 Hashtable pools(key=池名,value=池物件)。