2012-02-09 253 views
8

我想用tomcat設置連接池到mysql數據庫。我簡單的應用程序被稱爲Projekt的,在我的Projekt.xml中的Apache/conf目錄/卡塔利娜/本地主機我有Tomcat和JDBC連接池

<Context docBase="Projekt.war" path="/Projekt"> 
    <Resource name="jdbc/mysqldb" 
     auth="Container" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
     type="javax.sql.DataSource" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/Music" 
     username="andrzej" 
     password="qazxsw" 
     maxActive="20" 
     maxIdle="30" 
     maxWait="5" 
    /> 
</Context> 

的web.xml我的應用程序的

<servlet> 
    <servlet-name>HelloServlet</servlet-name> 
    <servlet-class>org.jtp.HelloServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>HelloServlet</servlet-name> 
    <url-pattern>/Hai</url-pattern> 
</servlet-mapping> 

<resource-ref>  
     <description>DB Connection</description>  
     <res-ref-name>jdbc/mysqldb</res-ref-name>  
     <res-type>javax.sql.DataSource</res-type>  
     <res-auth>Container</res-auth>  
</resource-ref> 

和我的Apache/lib文件夾我有

mysql-connector-java-5.1.18-bin.jar 

但是當我執行此代碼:

Context initContext = new InitialContext(); 
dataSource = (DataSource)initContext.lookup("java:comp/env/jdbc/mysqldb"); 
System.out.println(dataSource.getConnection().createStatement(). 
      execute("select * from Users")); 

我得到異常

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 

我現在很疑惑,在一些地方,我讀了它可能通過不將駕駛員的tomcat/lib目錄引起的,但我有它和它的作品,因爲當我測試的司機手動連接它的工作。

對於我的設置,我試圖按照 http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

編輯: 終於得到了它的工作,似乎我有一些左的背景標籤在這樣解析時,他重寫其他屬性的文件之一,所以它是我最後的錯。

回答

10

看起來你缺少Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI查找應該這樣做:從http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html

// Obtain our environment naming context 
Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env"); 

// Look up our data source 
DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); 

// Allocate and use a connection from the pool 
Connection conn = ds.getConnection(); 

文檔。

+0

仍然是同樣的錯誤,我之前使用過這個構造,但是在某處我找到了我引用的那個,無論如何它們都返回相同的錯誤。 – Andna 2012-02-09 14:55:50

+0

聽起來像這個人有同樣的問題,並已發佈解決方案http://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/ – drobson 2012-02-09 15:06:54

+0

還是沒什麼,我可以寫入這個文件夾,我甚至在我的webapp中創建contex.xml,仍然是同樣的錯誤。 – Andna 2012-02-09 15:33:24

13

要實現與Tomcat的JDBC連接池,可以使用替代XML配置文件的。我從來沒有能夠得到那些語境資源引用標籤的工作。此外,如果您確實不需要JNDI功能,那麼這些標籤是過度殺毒。

替代方法是使用Java代碼來配置 Tomcat的JDBC連接池。請參閱Tomcat的7文檔頁面,The Tomcat JDBC Connection Pool純醇的Java部分的示例代碼。

基本上,你:

  1. 實例化一個PoolProperties對象設置存儲(URL數據庫,數據庫用戶名,密碼,數據庫,和這樣的)。
  2. 實例化一個Tomcat DataSource對象在經過PoolProperties從上述步驟#1對象。

易peasy。像這樣...

PoolProperties p = new PoolProperties(); 
p.setUrl(jdbc:postgresql://localhost:5432/" + "my_database_name"); 
p.setDriverClassName("org.postgresql.Driver"); 
p.setUsername("someUserName"); 
p.setPassword("somePassword"); 
… 
DataSource datasource = new org.apache.tomcat.jdbc.pool.DataSource(p); 
datasource.setPoolProperties(p); 

要使用的數據源...

Connection conn = null; 
try { 
    conn = datasource.getConnection(); 
    … 

的DataSource實例可以存儲:

+0

這太棒了。謝謝。 – 2015-03-10 00:59:28

+0

這就是我搜索超過3天....! :) thankz分享....! – Saedawke 2016-12-05 15:11:11