【发布时间】: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和命名呢。
-
如果尚未解决:尝试使用
<jee:jndi-lookup id="sampleDataSource" resource-ref="true" jndi-name="java:comp/env/jdbc/sample" />或<jee:jndi-lookup id="sampleDataSource" resource-ref="true" jndi-name="comp/env/jdbc/sample" />
标签: spring tomcat6 connection-pooling c3p0