程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL連接池與Tomcat相關問題解答

MySQL連接池與Tomcat相關問題解答

編輯:MySQL綜合教程

以下的文章主要 講述的是關於tomcat(一個十分好用的JSP運行平台)和MySQL連接池相關問題的詳細解析詳,我前兩天在一個信譽度很好的網站看見的資料,覺得挺好,就拿出來供大家分享。

研究了一天,終於有所收獲,希望對大家有所幫助。首先請大家注意:這裡尤其討論tomcat(一個很好用的JSP運行平台)5.5版本中遇到的問題,為什麼尤其單對這個版本,我一會兒便加以說明。

問題一:Cannot create JDBC driver of class '' for connect URL 'null'

答:

[原因分析]

很多朋友在配置好$tomcat(一個很好用的JSP運行平台)/conf/server.xml(標准化越來越近了)、$tomcat(一個很好用的JSP運行平台)/conf/context.xml(標准化越來越近了)、甚至WEB-INF/web.xml(標准化越來越近了)後發現調用MySQL連接池便會出現以上錯誤。分析錯誤原因,一般是因為大家沒有邦定數據源(實際錯誤原因是因為driverClassName、url的設置為空,但大家肯定不會忘記設置這個地方,所以肯定是大家設置完了沒有進行連接!)。通常大家配置數據源有兩種方式在$tomcat(一個很好用的JSP運行平台)/conf/context.xml(標准化越來越近了)的設置方法就不單算了),一種是在$tomcat(一個很好用的JSP運行平台)/conf/server.xml(標准化越來越近了)的</GlobalNamingResources>前添加如下代碼:

設置方法一:

<Resource

name="jdbc/test" //數據源名稱

type="javax.sql.DataSource"

driverClassName="com.MySQL(和PHP搭配之最佳組合).jdbc.Driver" //這就是我剛才提到的driverClassName的設置

password="admin" //數據庫密碼

maxIdle="2"

maxWait="5000"

username="root" //數據庫用戶名

url="jdbc:MySQL(和PHP搭配之最佳組合)://localhost:3306/test?autoReconnect=true" //數據庫URL,就是剛才提到的url

maxActive="4"/>

除了有注釋的地方外,都是設置連接數目、閒置狀況和活動狀況的參數,如果你僅是做學習試驗,可以不必更改。MySQL連接池這種方法配制後的效果等同於在tomcat(一個很好用的JSP運行平台)圖形界面中配置操作。

另一種發法是在$tomcat(一個很好用的JSP運行平台)/conf/server.xml(標准化越來越近了)的<Context ...></Context>中加入如下代碼:

設置方法二:

  1. <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/> 
  2. <ResourceParams name="jdbc/test"> 
  3. <parameter> 
  4. <name>factory</name> 
  5. <value>org.apache(Unix平台最流行的WEB服務器平台).commons.dbcp.BasicDataSourceFactory</value> 
  6. </parameter> 
  7. <parameter> 
  8. <name>username</name> 
  9. <value>root</value> 
  10. </parameter> 
  11. <parameter> 
  12. <name>password</name> 
  13. <value>admin</value> 
  14. </parameter> 
  15. <parameter> 
  16. <name>driverClassName</name> 
  17. <value>com.MySQL(和PHP搭配之最佳組合).jdbc.Driver</value> 
  18. </parameter> 
  19. <parameter> 
  20. <name>url</name> 
  21. <value>jdbc:MySQL(和PHP搭配之最佳組合)://localhost:3306/test?autoReconnect=true</value> 
  22. </parameter> 
  23. <parameter> 
  24. <name>initialSize</name> 
  25. <value>20</value> 
  26. </parameter> 
  27. <parameter> 
  28. <name>maxActive</name> 
  29. <value>30</value> 
  30. </parameter> 
  31. <parameter> 
  32. <name>maxWait</name> 
  33. <value>10000</value> 
  34. </parameter> 
  35. </ResourceParams> 

這樣設置的通常目的是想讓數據源在一個單獨的映射目錄中實現,也就是通常這段代碼出現在<Context docBase="具體目錄(如D:\webapps\myjsp(SUN企業級應用的首選))" path="訪問名稱(如/myjsp(SUN企業級應用的首選))" reloadable="true"></Context>,這樣就可以通過訪問http://localhost:8080/myjsp(SUN企業級應用的首選)/XXX.jsp(SUN企業級應用的首選)來訪問D:\webapps\myjsp(SUN企業級應用的首選)中的某個jsp(SUN企業級應用的首選)頁面進而調取數據源或進行其它操作調取數據源。

問題是,無論哪種方法,大家都沒有進行連接!如果不進行ResourceLink,也免或者bean等無法找到你設置的代碼,又怎麼找到driverClassName和url呢?實際上任何一個參數設置都不會被找到的!

[解決方法]

知道了原因,解決也就方便了。無論你是使用哪種方法。

解決方法一:

如果想在某個映射目錄內實現ResourceLink,就在<Context ...></Context>中間添加<ResourceLink global="數據源名稱" name="映射後的名稱" type="javax.sql.DataSource"/>,注意如果你不了解代碼關聯關系,一定緊緊貼在<Context ...>後寫就好。

解決方法二:

如果想變成全局性的,在所有映射目錄中均可以使用,就干脆寫在$tomcat(一個很好用的JSP運行平台)/conf/context.xml(標准化越來越近了)中,萬事OK了。

一般大家把“數據源名稱”和“映射後的名稱”設置成同一個,例如我是這樣設置的<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>。

另外必須說明,在tomcat(一個很好用的JSP運行平台)5.5中,如果你像上面第二種設置方法,即使加上ResourceLink,也會遇到不能正常運行的問題。

問題二:javax.naming.NameNotFoundException: Name XXX is not bound in this Context

答:

[原因分析]

tomcat(一個很好用的JSP運行平台)5.5中,在<Context ...><Context>中設置數據源不能正常運行,我看過一位外國人寫的帖子,我英語水平不高,不過剛好能看懂。他說這是因為比較高的版本中(應該是說tomcat(一個很好用的JSP運行平台)和dbcp),factory的值由org.apache(Unix平台最流行的WEB服務器平台).commons.dbcp.BasicDataSourceFactory改為了org.apache(Unix平台最流行的WEB服務器平台).tomcat(一個很好用的JSP運行平台).dbcp.dbcp.BasicDataSourceFactory。

但是我進行過嘗試,並不能解決問題。而且我發現tomcat(一個很好用的JSP運行平台)5.5標准版本自帶dbcp,就在$tomcat(一個很好用的JSP運行平台)\common\lib中。我看過另一個網友的解說,他說用第二種設置方法是不行的。這說明第二種設置方法只適用以前版本,現在的版本我不知道要在哪部分做更改,但錯誤原因是想一起那麼設置,服務器找不到“數據源名稱”對應的數據源。

[解決方法]

知道原因就可以解決了,看來只有把數據源聲明在<GlobalNamingResources>中才能起作用。所以大家就按照第一種設置方法設置tomcat(一個很好用的JSP運行平台)5.5(這就是我為什麼尤其講tomcat(一個很好用的JSP運行平台)5.5)就可以了。

問題三:Cannot load JDBC driver class 'com.MySQL(和PHP搭配之最佳組合).jdbc.Driver'

答:

[原因分析]

不光對於MySQL(和PHP搭配之最佳組合),對於別的數據庫,只要找不到,就會拋出這個錯誤"Cannot load JDBC driver class",那麼為什麼會找不到數據庫驅動類呢?如何才能找到呢?其實很簡單。

[解決方法]

只要把jdbc拷貝到$tomcat(一個很好用的JSP運行平台)\common\lib中就可以了。

問題四:Cannot get a connection, pool exhausted

[原因分析]

很簡單,不能建立連接,MySQL連接池溢出,這說明你的連接資源都浪費了,原因是你沒有及時回收它們。

[解決方法]

及時並正確使用close()方法釋放ResultSet、Statement、Connection,具體語句我就不說了,推薦在finally中寫。

總結:所以,如果你想用tomcat(一個很好用的JSP運行平台)5.5建立一個數據源MySQL連接池,只要三步。

第一:設置數據源,推薦用圖形操作界面,如果手動就在$tomcat(一個很好用的JSP運行平台)/conf/server.xml(標准化越來越近了)中</GlobalNamingResources>前添加如下代碼:

  1. <Resource 
  2. name="jdbc/test" //數據源名稱  
  3. type="javax.sql.DataSource" 
  4. driverClassName="com.MySQL(和PHP搭配之最佳組合).jdbc.Driver" //這就是我剛才提到的driverClassName的設置  
  5. password="admin" //數據庫密碼  
  6. maxIdle="2" 
  7. maxWait="5000" 
  8. username="root" //數據庫用戶名  
  9. url="jdbc:MySQL(和PHP搭配之最佳組合)://localhost:3306/test?autoReconnect=true" //數據庫URL,就是剛才提到的url  
  10. maxActive="4"/> 

注釋參數記得更改成自己的。

第二:設置Resource連接。推薦在$tomcat(一個很好用的JSP運行平台)/conf/context.xml(標准化越來越近了)中寫入<ResourceLink global="數據源名稱" name="映射後的名稱" type="javax.sql.DataSource"/>,如果想就在某個單獨映射目錄實現,就在$tomcat(一個很好用的JSP運行平台)/conf/server.xml(標准化越來越近了)中需要映射的目錄中的<Context ...>後寫入。

第三:將JDBC拷貝到$tomcat(一個很好用的JSP運行平台)\common\lib中

另外,我在這裡不詳細說明如何調用數據源,這個問題比較簡單,但要注意,DataSource ds=(DataSource)envCtx.lookup("引用數據源");語句中"引用數據源"只的是"映射後的名稱",不是"數據源名稱",所以我建議大家方便起見把兩個名字設成同一個。而且特別要注意及時釋放閒置資源,不然MySQL連接池就會溢出!

以上是我今天研究的一些成果,我還是個初學者,希望這篇文章對大家有所幫助。有什麼問題可以聯系我,我的郵箱是:[email protected](愛看霓虹燈的人)。本文為neonlight.bokee.com(CSDN_MathMagician)原創,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved