tomcat配置c3p0資料庫連線池遇到問題與解決
這短時間在做一個Android專案,由於牽扯到資料庫,也就有伺服器。app預期是想做大,所以一方面考慮到效能相關
因此就想把tomcat和比較知名的c3p0結合起來,從這一方面來提高效能。
首先第一步:把c3p0解壓資料夾的3個jar包全部考到tomcat根目錄下lib資料夾下面,當然還有資料庫連線jar包。
第二步:配置server.xml以及content.xml;
server.xml中:
在GlobalNamingResources節點下加入(不同資料庫自行修改):
在content.xml中加入源引用<Resource name="jdbc/sign" auth="Container" description="DB Connection" factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource" driverClass="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost:3306/sign?autoReconnect=true" user="root" password="123456" maxPoolSize="200" minPoolSize="20" acquireIncrement="1" />
<ResourceLink name="jdbc/sign" global="jdbc/sign" type="javax.sql.DataSource"/>
在自己專案web.xml中加入:
然後呢,在自己專案中這樣引用:<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/sign</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
InitialContext ctx = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/sign");
conn = ds.getConnection();
貌似可以了哦。、。、。、。、。、。、。、。
然而,對於我,並不行,一開始就報錯:
按照字面意思來說,就是你的jdbcurl不對!所以我最開始就卡在這裡。Cannot create JDBC driver of class '' for connect URL 'null'
就去修改url,開始把名字改成“url”,然後改回jdbcUrl,但是都不對。所以這條路應該不對。
後來,我又去認真對比了下我的web.xml中引用的name和server.xml中的name是否相同,以及是否與conten.xml否一致。
當然,後面經過檢查修改後一致了,但還是有問題,還是這個錯誤。
後面,再繼續,我想到了可能的一個方面,就是以前我沒當回事的一個方面:
當我在eclipse中開啟tomcat(路徑是我電腦的,不是eclipse的)時,並不能訪問http://localhost:8080/的tomcat主頁,
但是卻可以訪問http://localhost:8080/Test/test.jsp,我懷疑可能是這裡面的某個原因~
因為我改的tomcat是我電腦安裝根目錄下面的tomcat的server.xml。
在網上一番搜尋後,終於發現不能訪問tomcat主頁的原因了:可能eclipse中啟動的tomcat僅僅是一個shell,並不能啟動tomcat全部服務,
並且,在我們配置tomcat時,有個選項也使得啟動後不能進入tomcat主頁:
在我們配置tomcat時,預設是選第一個,從字面意思上來理解,就是系統實際是釋出帶eclipse的一個目錄下,並不是tomcat的webapp下面
當我把server location改了後,發現還是不行,還是報
Cannot create JDBC driver of class '' for connect URL 'null'
後面,我又重新去tomcat的conf下面看server.xml和content.xml,發現我以前新增的資料來源程式碼都不見了
然而我其實並沒有在意,反正就幾行,重新寫過唄。
寫好後,從eclipse啟動,測試,還是報null driver的錯誤。此時我就很納悶了。網上一小段找方法後,我又把思路放到了
conf資料夾的server.xml和content.xml,這時,我發現我改完的又不見了!!!!!!
貌似找到問題的引子了,我十分興奮~~再一次求助網路,果然是server.xml和content.xml的原因:
Tomcat伺服器在Eclipse中啟動時,會自動釋出Eclipse中部署的專案,但是我的專案是自己手動在外面部署的,
Eclipse只認得在它裡面部署的專案,因此它會建立一個新的server.xml檔案覆蓋原來的檔案,裡面只有Eclipse中部署的專案。
從該網頁得到解決方法:
解決方法:
設定Ecplise,取消掉自動釋出功能。
依次選擇 Window-Preferences-Server-Launching,取消Automatically publish wen starting servers,點選OK,搞定。
解決方法二:
Ecplise專案中有一個Server專案,有一個Tomcat v7.0 Server at localhost-config,
裡面也有server.xml和content.xml,替換成你修改後的檔案。Tomcat重新發布時會用這裡的配置檔案覆蓋Tomcat下的conf下的檔案。