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

Tomcat 6.0 整合 Oracle 10g JNDI 資料源完整設定與測試

     編輯:Oracle 資料庫基礎

環境版本

  • Apache Tomcat 6.0.x
  • Oracle Database 10g Release 2 (10.2.0.x)
  • JDBC Driver: ojdbc14.jar (JDK 1.4/1.5) 或 ojdbc5.jar (JDK 1.5+)

設定步驟

1. 放置 JDBC 驅動

# 從 $ORACLE_HOME/jdbc/lib 複製
cp $ORACLE_HOME/jdbc/lib/ojdbc14.jar $CATALINA_HOME/lib/

2. 設定全域資料源

編輯 $CATALINA_HOME/conf/server.xml,在 `` 區塊內的 `` 加入:

<Context path="/test" docBase="D:/Tools/Project/test/WebRoot" reloadable="true">
  <Resource name="jdbc/chong800"
            auth="Container"
            type="javax.sql.DataSource"
            maxActive="100"
            maxIdle="10"
            maxWait="10000"
            username="scott"
            password="tiger"
            driverClassName="oracle.jdbc.driver.OracleDriver"
            url="jdbc:oracle:thin:@localhost:1521:chong800"
  />
</Context>

屬性說明:

  • maxActive:連線池最大連線數。
  • maxIdle:閒置保留連線數。
  • maxWait:取得連線最長等待毫秒數。
  • url:Thin 模式連線字串,格式 jdbc:oracle:thin:@host:port:sid。

3. JSP 測試頁面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
<!DOCTYPE html>
<html>
<head><title>資料源連線測試</title></head>
<body>
<%
    Connection conn = null;
    try {
        Context initCtx = new InitialContext();
        DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/chong800");
        conn = ds.getConnection();
        out.println("✅ 連線成功!Connection 物件: " + conn);
        out.println("<br>資料庫元資料: " + conn.getMetaData().getDatabaseProductName() + " " + conn.getMetaData().getDatabaseProductVersion());
    } catch (Exception e) {
        out.println("❌ 連線失敗: " + e.getMessage());
        e.printStackTrace(new java.io.PrintWriter(out));
    } finally {
        if (conn != null) try { conn.close(); } catch {}
    }
%>
</body>
</html>

常見問題排查

現象原因解決
ClassNotFoundException: oracle.jdbc.driver.OracleDriver驅動 jar 未放入 $CATALINA_HOME/lib確認 ojdbc*.jar 位置,重啟 Tomcat
NameNotFoundException: jdbc/chong800JNDI 名稱不符或 Context 路徑錯誤檢查 server.xml Resource name 與 lookup 字串完全一致
ORA-12505 / ORA-12514SID/Service Name 錯誤或 Listener 未註冊用 `lsnrctl status` 確認服務名,url 改用 Service Name: //host:port/service_name
連線洩漏導致 maxActive 耗盡程式未在 finally 關閉連線務必使用 try-with-resources (JDK 7+) 或 finally 區塊 close()

進階調優建議

  • 驗證連線有效性: 加入 validationQuery="SELECT 1 FROM DUAL"、testOnBorrow="true" 防止防火牆斷開閒置連線。
  • 移除棄用驅動類別: Oracle 11g+ 建議用 oracle.jdbc.OracleDriver(無 .driver 套件)。
  • 監控連線池: 整合 JMX 或 Tomcat Manager 監控 numActive, numIdle 指標。

結語

Tomcat 內建 DBCP 連線池配合 Oracle Thin Driver,設定簡單且效能足夠中小型應用。關鍵在於驅動版本與 JDK 相容、JNDI 名稱一致性、連線字串正確性。建立標準化 `server.xml` 範本與測試 JSP,可大幅減少部署環節錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved