今天部署一個應用,本地跑都沒問題,往公司服務器上放一版,結果出現如下錯誤:
公司服務器版本如下,好吧,的確有點老,問題是還是32位的系統。
服務器上環境爲jdk1.8,tomcat1.8,結果就報上邊的錯誤。
百度後發現有如下幾種方案:
- 忽略這些警告。 Tomcat正在做正確的工作。 實際的bug是在別人的代碼中(所討論的JDBC驅動程序),而不是在你的代碼中。 Tomcat在正常工作,並等待JDBC驅動程序供應商解決問題,以便升級驅動程序。 另一方面,您不應該在webapp的
/ WEB-INF / lib
中放置JDBC驅動程序,而只能在服務器的/ lib
中放置JDBC驅動程序。 如果你仍然保存在webapp的/ WEB-INF / lib
中,那麼你應該使用ServletContextListener
手動註冊和註銷它。 - 降級到Tomcat 6.0.23或更低版本,這樣你就不會被那些警告所困擾。但它會悄悄地泄漏內存。這些內存泄漏是Tomcat的
OutOfMemoryError
問題背後的主要原因之一。 - 將JDBC驅動程序移動到Tomcat
/lib
文件夾,並有一個連接池數據源來管理驅動程序。請注意,Tomcat的內置DBCP在關閉時不會正確註銷驅動程序。另請參閱作爲WONTFIX關閉的bug DBCP-322。您可以將DBCP替換爲另一個更好的DBCP連接池。例如HikariCP,BoneCP,或Tomcat JDBC池。
方案一試了,但是沒什麼用,否定。
方案二沒試,主要是降低tomcat版本會暴露出太多漏洞,還得修復,麻煩。
方案三沒試,感興趣的可以試試。
我的解決方案很簡單,就是降一下jdk版本,由1.8降至1.7,問題解決。
別忘了配置環境變量啊。