首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Java 使用 Oracle 內建連線池 OracleConnectionCacheImpl 完整實作範例

     編輯:Oracle 資料庫基礎

完整連線池管理類

import java.sql.Connection;
import oracle.jdbc.pool.OracleConnectionCacheImpl;

public class DBPool {

    /** 連線池單例 */
    private static OracleConnectionCacheImpl pool = null;

    /** 初始化連線池 */
    public static void init() {
        try {
            // 連線參數
            String user = "user";
            String passWord = "pwd";
            String host = "127.0.0.1";
            String port = "1521";
            String sid = "Oracle92";
            int max = 20;   // 最大連線數
            int min = 5;    // 最小連線數

            // 組裝 JDBC Thin URL
            String url = "jdbc:oracle:thin:@" + host + ":" + port + ":" + sid;

            // 實例化並設定
            pool = new OracleConnectionCacheImpl();
            pool.setURL(url);
            pool.setPassword(passWord);
            pool.setUser(user);
            pool.setMaxLimit(max);
            pool.setMinLimit(min);

            // 快取策略:動態擴展,用完超過上限則關閉
            pool.setCacheScheme(OracleConnectionCacheImpl.DYNAMIC_SCHEME);
            /* 其他策略:
               FIXED_RETURN_NULL_SCHEME  - 達上限直接回傳 null
               FIXED_WAIT_SCHEME         - 達上限持續等待
            */

            /* 若已有 OracleConnectionPoolDataSource (ocpds),可直接注入:
               pool.setConnectionPoolDataSource(ocpds);
               此時上方 URL/帳密/限制設定可省略。
            */

        } catch (Exception ex) {
            ex.printStackTrace();  // 建議記錄日誌
        }
    }

    /** 關閉連線池 (應用關閉時呼叫) */
    public static void destroy() {
        if (pool != null) {
            try {
                pool.close();
                pool = null;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    /** 取得連線 */
    public static Connection getConnection() {
        try {
            return pool.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /** 監控除錯用 */
    public static void tuning() {
        System.out.println("Active Conns: " + pool.getActiveSize());
        System.out.println("Cached Conns: " + pool.getCacheSize());
    }
}

關鍵點說明

項目說明
Driver使用 oracle.jdbc.pool.OracleConnectionCacheImpl,需 ojdbc*.jar 支援
URL 格式jdbc:oracle:thin:@host:port:sid (Thin 驅動,無需 Oracle Client)
CacheSchemeDYNAMIC_SCHEME 最彈性,達 MaxLimit 後新連線用完即關,不佔用池資源
Thread Safety靜態單例模式,getConnection() 為同步安全
生命週期應用啟動呼叫 init(),關閉呼叫 destroy()

進階建議

  • 生產環境建議改用 HikariCP、Druid 或 Tomcat JDBC Pool,功能更豐富、效能更佳、社群支援更完善。
  • 若堅持使用 Oracle 內建池,請注意 OracleConnectionCacheImpl 在 12c 後標記為 @Deprecated,未來版本可能移除。
  • 監控指標:getActiveSize() (使用中)、getCacheSize() (閒置池中),定期記錄以調整 Min/Max 參數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved