0

如果我将 Web 应用程序部署到 Tomcat,并且有这样的代码:

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/myDB");

我怎样才能指定这DataSource是一个PoolingDataSource?如何配置池 ( GenericObjectPool) 以注入PoolingDataSourcewith?

或者,这是 Tomcat 的 JNDI 实现的默认行为吗?提前致谢!

4

2 回答 2

0

JDBC 连接池是org.apache.tomcat.jdbc.poolcommons-dbcp连接池的 替代品或替代品 。

  1. server.xml在该部分的文件中添加GlobalNamingResources如下内容:

    <Resource name="jdbc/TestDB" 
              auth="Container" 
              type="javax.sql.DataSource" 
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              testWhileIdle="true"
              testOnBorrow="true"
              testOnReturn="false"
              validationQuery="SELECT 1"
              validationInterval="30000"
              timeBetweenEvictionRunsMillis="30000"
              maxActive="100" 
              minIdle="10" 
              maxWait="10000" 
              initialSize="10"
              removeAbandonedTimeout="60"
              removeAbandoned="true"
              logAbandoned="true"
              minEvictableIdleTimeMillis="30000" 
              jmxEnabled="true"
              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
              username="root" 
              password="password" 
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/mysql"/>
    
  2. 将 JDBC 驱动程序 JAR 添加到 Tomcat lib 目录中。

  3. 添加你的context.xml

    <ResourceLink global="jdbc/TestDB" name="jdbc/TestDB" 
                  type="javax.sql.DataSource"/>
    

在Tomcat JDBC 连接池中查看更多信息。

于 2013-07-12T05:17:57.717 回答
0

只需配置连接池设置(maxActive、maxWait、maxIdle、...)。Tomcat 带有 apache commons-dbcp 库。它被重新打包为 $CATALINA_HOME/lib/tomcat-dbcp.jar。

查看 tomcat 文档了解详细信息:http: //tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html#Database_Connection_Pool_%28DBCP%29_Configurations

<Context>
  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest"/>
</Context>
于 2013-07-12T04:50:03.410 回答