Tomcat 和 JDBC 连接池 [英] Tomcat and JDBC connection pooling

查看:41
本文介绍了Tomcat 和 JDBC 连接池的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 tomcat 设置到 mysql 数据的连接池.我的简单应用程序名为 Projekt,在我的 Apache/conf/Catalina/localhost 中的 Projekt.xml 中有

I am trying to set up connection pooling to mysql databe with tomcat. My simple app is called Projekt, in my Projekt.xml in Apache/conf/Catalina/localhost I have

<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

web.xml of my app

<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 文件夹中我有

and in my Apache/lib folder I have

mysql-connector-java-5.1.18-bin.jar

但是当我执行这段代码时:

but when I execute this code:

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 中造成的,但我有它并且它可以工作,因为当我使用手动连接测试驱动程序时它可以工作.

I am puzzled now, in some places I read that it may be caused by not placing driver in tomcat/lib, but I have it and it works, because when I tested the driver with manual connections it worked.

对于我的设置,我试图遵循http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

For my setup I was trying to follow http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

终于让它工作了,似乎我在其中一个文件中有一些左上下文标签,所以在解析时他覆盖了其他属性,所以最后都是我的错.

Finally got it working, it seemed that I had some left context tags in one of the files so when parsing he overriden other attributes, so it is all my fault at the end.

推荐答案

看来你缺了 Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI 查找应该像这样完成:

Looks like you are missing Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI lookup should be done like this:

// 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(); 

来自 http://tomcat.apache.org/的文档tomcat-7.0-doc/jndi-resources-howto.html.

这篇关于Tomcat 和 JDBC 连接池的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆