1. 程式人生 > >數據源和連接池

數據源和連接池

ive lan urn 上下文 添加 實現 del error 獲得

tomcat配置數據源步驟:

1、配置Tomcat的conf/context.xml -----------> 直接粘貼到<context></context>中

  <Resource name="jdbc/news" 數據源的邏輯名稱,可以隨便取,但是會用到
    auth="Container" 認證、容器管理的、不用管
    type="javax.sql.DataSource" 容器類型
    maxActive="100" 連接池裏最大的連接數量
    maxIdle="30" 最大同時能有30個空閑鏈接
    maxWait="10000" 最大的等待時間。等待連接
    username="root"
    password="kgc"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/kgcnews"

/>

2、使用JNDI獲取連接對象

/***
     * 用過數據源連接數據庫
     */
    public static void getConn(){
        try {
            //初始化上下文
            Context context = new InitialContext();
            //獲取在context.xml中已配好的數據源java:comp/env/ + 數據源邏輯名
            DataSource ds = (DataSource) context.lookup("java:comp/env/bigwork");
            
//根據數據源獲得連接對象 conn = ds.getConnection(); } catch(Exception e) { e.printStackTrace(); } }

3.錯誤

(1)找不到數據源

解決辦法:

在eclipse中的server中直接配置,可能在tomcat電腦路徑中配置了但是沒有配上

<Resource 配到server.xml中,又在context.xml中添加<ResourceLink。。。name=" 數據源邏輯名">

(2)java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z

解決方案:
mysql-connector 版本為 5.0.4 ,那麽對應的 dbcp 和 pool 版本應該為 1.4 和 1.6 。
5.0.4 不應該使用 2.0 及以上版本的 dbcp 和 pool。因為 在 dbcp 中 org.apache.commons.dbcp2.DelegatingConnection 有如下代碼:
try {
return _conn.isValid(timeout);
}
catch (SQLException e) {
handleException(e);
return false;
}

上述代碼中 isVaild 在 com.mysql.jdbc.Connection (5.0.4 ) 中並未實現上述方法,因此將會拋出抽象方法錯誤。
如果需要使用 dbcp 2.0 ,那麽 mysql-connector 必須使用 5.1.3 版本。

數據源和連接池