1. 程式人生 > >tomcat配置c3p0資料庫連線池遇到問題與解決

tomcat配置c3p0資料庫連線池遇到問題與解決

這短時間在做一個Android專案,由於牽扯到資料庫,也就有伺服器。app預期是想做大,所以一方面考慮到效能相關

因此就想把tomcat和比較知名的c3p0結合起來,從這一方面來提高效能。

首先第一步:把c3p0解壓資料夾的3個jar包全部考到tomcat根目錄下lib資料夾下面,當然還有資料庫連線jar包。

第二步:配置server.xml以及content.xml;

server.xml中:

在GlobalNamingResources節點下加入(不同資料庫自行修改):

  	 <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"
              />
在content.xml中加入源引用
	<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();
貌似可以了哦。、。、。、。、。、。、。、。

然而,對於我,並不行,一開始就報錯:

Cannot create JDBC driver of class '' for connect URL 'null'
按照字面意思來說,就是你的jdbcurl不對!所以我最開始就卡在這裡。

就去修改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下的檔案。