繁体   English   中英

Tomcat和JDBC连接池

[英]Tomcat and JDBC connection pooling

我正在尝试使用tomcat建立与mysql数据库的连接池。 我的简单应用程序叫做Projekt,在我的Apache / conf / Catalina / localhost的Projekt.xml中

<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

编辑:最后让它工作,似乎我在其中一个文件中有一些左上下文标记,所以在解析时它覆盖了其他属性,所以这是我最后的错。

要使用Tomcat实现JDBC连接池, 可以使用XML配置文件的替代方法 我从来没有能够使这些Contextresource-ref标签工作。 此外,如果您不真正需要JNDI功能,那些标签是过度的。

另一种方法是使用Java代码配置 Tomcat的JDBC连接池。 请参阅Tomcat 7文档页面, Tomcat JDBC连接池Plain Ol'Java部分中的示例代码。

基本上,你:

  1. 实例化PoolProperties对象以存储您的设置(URL到数据库,db用户名,db密码等)。
  2. 从上面的步骤#1传递PoolProperties对象时实例化Tomcat DataSource对象。

十分简单。 像这样…

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实例:

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

// 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的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM