今天下午收到一名網友的在線求助。先簡要描述一下問題的背景:java
Windows平臺,tomcat應用服務器, Oracle數據庫,應用架構Spring使用c3p0數據源web
問題現象:tomcat在啓動過程當中會堵塞8分鐘,而後報錯:spring
2014-1-5 20:44:10 org.hibernate.connection.ConnectionProviderFactory newConnectionProvider 信息: Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider 2014-1-5 20:52:00 org.hibernate.util.JDBCExceptionReporter logExceptions 警告: SQL Error: 0, SQLState: null 2014-1-5 20:52:00 org.hibernate.util.JDBCExceptionReporter logExceptions 嚴重: Connections could not be acquired from the underlying database! 2014-1-5 20:52:00 org.hibernate.cfg.SettingsFactory buildSettings 警告: Could not obtain connection metadata java.sql.SQLException: Connections could not be acquired from the underlying database! //...省略棧信息 Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
這個問題很常見,因此我給出瞭如下幾條解決思路:sql
1. 檢查數據庫配置文件是否正確:驅動名 url 用戶名 口令 端口 數據庫
數據庫
2. jdbc驅動包版本是否一致tomcat
3. 數據庫服務是否正常啓動
服務器
4. 用項目配置文件的配置,寫一個java程序可否正常鏈接架構
經過第四步發現能夠正常鏈接,那就排除了前面3種可能。緊接着,我又細細的看了他spring的配置文件,發現也沒有什麼問題。這時候我又感受會不會是防火牆的因素,經過tomcat連數據庫時不容許,後來去看了他的防火牆,果真開着,而後我將全部的策略關閉後,再試,仍是不行。看來問題不在這裏。app
如今惟一能確定的就是鏈接數據庫連不上,那問題出在哪裏呢?突然我想起來一個事情,你們平時都習慣了用MyEclipse,喜歡用MyEclipse部署本身的項目,那麼以前的項目部署後在不用的時候並無remove掉,因此啓動的時候頗有多是在加載另一個項目時堵塞,抱着試一試的心態,我將本項目remove掉,重啓tomcat,果真還卡在那裏,問題的緣由找到了。這樣致使tomcat沒法啓動,也沒有辦法經過登陸他的配置管理系統來中止其他的應用。最後只能將tomcat目錄下webapps下的項目都刪掉,而後啓動後在部署,運行正常!
webapp