太长不看版:Driver问题导致。
详细版:
Background:
- 使用Hibernate连接Oracle,需求要The version of Oracle should be upgraded from 12c to 19c. So I have to change the ojdbc to ojdbc8(ver 19.3.0.0).
- 我的操作是在idea工程中remove原有的dependence中移除ojdbc,然后+从官网下载最新的ojdbc8.
- 执行单元测试都没有问题,结果在run server的时候报错。
Caused by: 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)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 36 more
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
... 39 more
Troubleshooting:
- 网上搜了很多这个错误的原因,我就不再复制了。有看到说是驱动的问题但是我想UT可以成功不应该是驱动的问题。
- 思考:
- 我的工程因为是用了Hibernate,而且配置都没有改变,不应该是Hibernate的问题。
- 于是查看Oracle中的数据也没有发现明显的问题。
- 看到异常中存在C3P0的类于是跟了跟代码,看了一个小时没看明白底层逻辑。
最后发现我们的工程是用ANT工具进行build,而我新下载的ojdbc没有放到build.xml中指定的lib。UT可以成功是因为UT只用的IDEA通过javac的build,所以配置在project library中就完全可用。
END