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

Java 應用中 Oracle 連線池配置實戰:iPlanet 與 Sun Java System 完整指南

     編輯:Oracle 資料庫基礎

連線池核心優勢

  • 統一配置、管理、監控資料庫連線;參數調優(最大/最小連線、閒置超時、驗證查詢)集中一處。
  • 自動回收應用洩漏的連線(未 close、異常中斷),避免資料庫端進程耗盡。
  • 應用與資料庫解耦:JNDI 名稱固定,後端遷移/切換/叢集對應用透明。

iPlanet Application Server 6.5 配置步驟

  1. 將 Oracle JDBC 驅動 classes12.zip 放入 $INSTANCE_DIR/lib。
  2. 管理主控台 → JDBC → Connection Pools → New。
    名稱:OraclePool,資料源類別:oracle.jdbc.pool.OracleConnectionPoolDataSource。
  3. 屬性頁設定:
    URL=jdbc:oracle:thin:@host:1521:sid
    User=app_user
    Password=****
    MaxConnections=50、MinConnections=5、IdleTimeout=300、ValidationQuery=SELECT 1 FROM DUAL。
  4. 建立 JDBC Resource:jdbc/OracleDS 映射至 OraclePool。
  5. 重啟服務生效。

Sun Java System Application Server 7 配置步驟

  1. classes12.zip 放入 domain_dir/server1/lib。
  2. 瀏覽器開啟 https://host:4848 管理主控台。
    server1 → JDBC → Connection Pools → New。
    名稱:MyConnectionPool。
  3. General 頁:
    DataSource Classname:oracle.jdbc.pool.OracleConnectionPoolDataSource。
  4. Properties 頁:刪除預設屬性,新增:
    URL=jdbc:oracle:thin:@dbhost:1521:ORCL
    User=app_user
    Password=****
    dataSourceName=OracleDS(可選)。
    其餘參數(Max/Min/Idle/Validation)按環境調整。
  5. Finish 建立連線池。
  6. 建立 JDBC Resource:jdbc/credit2 → 關聯 MyConnectionPool。
  7. 重啟 server1 生效。

通用 Java 連線池取得連線類

package com.j2ee.db;

import javax.naming.*;
import javax.sql.DataSource;
import java.sql.Connection;

public class DbConnection {
    public Connection connectDbByConnectionPool() {
        Connection conn = null;
        try {
            Context ctx = new InitialContext();
            DataSource ds = (DataSource) ctx.lookup("jdbc/credit2"); // 對應 JNDI 名稱
            conn = ds.getConnection();
        } catch (Exception e) {
            System.err.println("DB Connection Error: " + e.getMessage());
            e.printStackTrace();
        }
        return conn;
    }
}

應用層使用模式

// Servlet / EJB / Spring 服務層
public void doBusiness() {
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
        conn = new DbConnection().connectDbByConnectionPool();
        ps = conn.prepareStatement("SELECT * FROM orders WHERE status = ?");
        ps.setString(1, "OPEN");
        rs = ps.executeQuery();
        while (rs.next()) { /* 處理 */ }
    } catch (SQLException e) {
        // 記錄錯誤、拋出業務異常
    } finally {
        // 連線池管理連線生命週期,此處 close 實際是歸還池中
        if (rs != null) try { rs.close(); } catch (SQLException ignore) {}
        if (ps != null) try { ps.close(); } catch (SQLException ignore) {}
        if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
    }
}

關鍵參數調優指南

常見問題排查

  • 連線取得超時:檢查 MaxConnections 是否過小、業務邏輯是否未歸還連線(finally 區塊缺失)、資料庫端鎖等待導致連線長期佔用。
  • Stale Connection (ORA-03113/03114):啟用 ValidationQuery + ValidationInterval,或配置 ExpiredConnectionCheck(WebSphere)/ test-on-borrow (Tomcat/Druid/HikariCP)。
  • 驅動版本不匹配:Oracle 19c+ 建議使用 ojdbc8.jar (JDBC 4.2),舊版 classes12.zip 僅支援 9i/10g,已停止維護。
  • 連線池洩漏:啟用連線池偵錯日誌(如 log-abandoned=true),定期分析堆疊追蹤定位洩漏代碼。

現代化替代方案

新專案建議直接在應用框架層配置高效能連線池:

  • HikariCP:Spring Boot 2.x 預設、極速、輕量、預設最佳化參數。
  • Druid:阿里開源、內建監控、SQL 防火牆、適合國產化環境。
  • Tomcat JDBC Pool / DBCP2:傳統 Servlet 容器內建選擇。

應用層連線池可繞過應用伺服器 JNDI 查找開銷,支援更精細的運行期指標暴露,是微服務/雲原生架構的主流選擇。

無論選擇哪種連線池,核心原則不變:配置集中化、參數數據化、洩漏零容忍、演練常態化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數建議起始值調整依據
MinConnectionsCPU 核心數 × 2避免冷啟動延遲,維持基線可用連線
MaxConnections資料庫 PROCESSES 參數 × 0.7 / 應用節點數防止單一應用佔滿資料庫進程
IdleTimeout300 秒平衡連線重建開銷與資料庫端閒置進程
ValidationQuerySELECT 1 FROM DUAL輕量、無副作用、驗證連線有效性
ValidationInterval30 秒避免頻繁驗證影響效能
ConnectionTimeout30 秒取得連線最長等待,防止業務線程無限阻塞