我在java中创建了一个mavenized Web应用程序。如果我使用maven jetty插件运行Web应用程序,我可以从连接池初始化数据源,也可以从数据源获取连接。但是当我在tomcat服务器上部署应用程序时,它能够初始化数据源,但在尝试获取连接时抛出异常:
java.sql.SQLException: Connections could not be acquired from the underlying database!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529)
即使我在server.xml中对资源进行了更改,也在web.xml中对resouces-ref进行了更改,但我仍然无法获得连接。
**Server.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>
尝试在tomcat服务器上运行应用程序时,我在此方案中缺少什么?
答案 0 :(得分:0)
您在数据源上设置的属性不是c3p0 ComboPooledDataSource的属性。例如,您设置了一个名为username
的属性。 ComboPooledDataSource属性为user
。 validationQuery
应为preferredTestQuery
,testOnBorrow
应为testConnectionOnCheckout
,testWhileIdle
映射为使用非零idleConnectionTestPeriod
等。
有关c3p0's docs的完整信息,请参阅configuration properties。