數據源和連接池
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 版本。
數據源和連接池