在tomcat基于Spring的应用程序中使用c3p0连接池

Neh*_*nia 5 spring connection-pooling c3p0 tomcat6

我有一个在tomcat 6下运行的基于Spring的Web应用程序.现在,我想使用c3p0连接池而不是tomcat的默认DBCP.所以,从c3p0帮助文档中,我已经定义了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" 
   />
Run Code Online (Sandbox Code Playgroud)

现在,文档说,我应该包括以下内容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> 
Run Code Online (Sandbox Code Playgroud)

我还有以下内容applicationContext.xml:

<jee:jndi-lookup id="sampleDataSource" resource-ref="true"
    jndi-name="jdbc/sample" />
Run Code Online (Sandbox Code Playgroud)

当我启动tomcat时,我得到了

javax.naming.NameNotFoundException:名称jdbc未绑定在此Context中

没有c3p0并在tomcat6中使用默认连接池工作正常.

任何帮助,将不胜感激.

小智 1

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

<Context antiJARLocking="true" swallowOutput="true">

    <ResourceLink
     global="jdbc/sample"
     name="jdbc/sample"
     type="javax.sql.DataSource" />
</Context>
Run Code Online (Sandbox Code Playgroud)

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