【问题标题】:Using c3p0 connection Pooling in a tomcat Spring based App在基于tomcat Spring的应用程序中使用c3p0连接池
【发布时间】:2023-03-20 07:27:02
【问题描述】:

我有一个在 tomcat 6 下运行的基于 Spring 的 Web 应用程序。现在,我想使用 c3p0 连接池而不是 tomcat 的默认 DBCP。因此,从c3p0 help 文档中,我在context.xml 中定义了数据源,例如:

<Resource name="jdbc/sample" auth="Container"
     driverClassName="oracle.jdbc.driver.OracleDriver"
     url="jdbc:oracle:thin:@someServer:1551:xyz"
     username="userName"
     password="pwd"
     validationQuery="SELECT 1 FROM dual"
     testOnBorrow="true"
     testWhileIdle="true"
     factory="org.apache.naming.factory.BeanFactory" 
     type="com.mchange.v2.c3p0.ComboPooledDataSource" 
     maxPoolSize="20" 
     minPoolSize="5" 
     acquireIncrement="1" 
   />

现在,文档说,我应该在 web.xml 中包含以下内容:

<resource-ref>
  <res-ref-name>jdbc/sample</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref> 

我在applicationContext.xml中也有以下内容:

<jee:jndi-lookup id="sampleDataSource" resource-ref="true"
    jndi-name="jdbc/sample" />

当我启动tomcat时,我得到了

javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

没有 c3p0 并且在 tomcat6 中使用默认连接池可以正常工作。

任何帮助将不胜感激。

【问题讨论】:

  • 为什么要这样做?您自己说过 - “tomcat6 中的默认连接池工作正常”
  • 为什么不直接在applicationContext.xml中定义数据源,完全绕过jndi和命名呢。
  • 如果尚未解决:尝试使用&lt;jee:jndi-lookup id="sampleDataSource" resource-ref="true" jndi-name="java:comp/env/jdbc/sample" /&gt;&lt;jee:jndi-lookup id="sampleDataSource" resource-ref="true" jndi-name="comp/env/jdbc/sample" /&gt;

标签: spring tomcat6 connection-pooling c3p0


【解决方案1】:

这个帖子很旧,所以答案是为了将来使用 - 我有同样的问题(这就是我进入这个线程的方式)。

我在进行了一项小型研究后解决了这个问题。 有一些定义,使用的数据源不支持。 当您删除这些定义并重命名其他定义时,数据源的创建没有问题 并且不需要上面提到的resourceLink。

在以下链接中,您可以找到支持的定义列表。 http://www.mchange.com/projects/c3p0/#tomcat-specific

以下链接指向数据源的 java doc。 根据那里列出的方法,您可以配置资源 context.xml 文件中的标记。 http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/ComboPooledDataSource.html

【讨论】:

    【解决方案2】:

    您还需要在 context.xml 中输入一个条目,例如:

    <Context antiJARLocking="true" swallowOutput="true">
    
        <ResourceLink
         global="jdbc/sample"
         name="jdbc/sample"
         type="javax.sql.DataSource" />
    </Context>
    

    我同意 J2EE 有太多的间接级别。请注意,context.xml 可以驻留在 Tomcat 的“conf”目录中,也可以驻留在 webapp 的 META-INF 目录中(取决于您希望数据源用于所有 Web 应用程序还是仅用于特定的一个)。使用 context.xml 条目,您不需要 web.xml 中的资源引用。

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 2014-02-09
      • 2012-05-11
      • 2015-05-26
      • 2019-10-13
      • 1970-01-01
      • 2010-11-30
      • 2017-03-08
      相关资源
      最近更新 更多