2012-09-21 171 views
1

我有一個web應用程序,我試圖在java6,tomcat6和mysql5.5的遠程windows 2003服務器上部署。部署應用程序後,當我點擊應用程序的網址,我收到以下錯誤。我做了一些谷歌,並發現一些鏈接,說要更改localhost連接字符串127.0.0.1,但沒有奏效,一些鏈接說檢查連接字符串,所以我創建了一個簡單的Java類在同一臺Windows機器上測試連接字符串,usename和密碼。當我運行該類時,它運行良好,沒有任何錯誤,但是當我運行使用相同連接字符串和用戶名和密碼的Web應用程序時,它將引發錯誤。還有一些鏈接建議修改mysql的my.ini,但是我沒有在mysql安裝目錄中找到任何my.ini。Tomcat無法通過JDBC連接器連接到mysql [解決]

我沒有得到任何線索來處理這個錯誤,所以請你指導我。全棧跟蹤如下

INFO: Server startup in 2832 ms 
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link fai 
lure 

The last packet sent successfully to the server was 0 milliseconds ago. The driv 
er has not received any packets from the server. 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct 
orAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC 
onstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1 
117) 
     at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350) 
     at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408) 
     at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2 
445) 
     at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230) 
     at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813) 
     at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct 
orAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC 
onstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
     at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) 
     at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java 
:334) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:185) 
     at com.adxchange.utils.DBConnectionSingleton.getConnection(DBConnectionS 
ingleton.java:28) 
     at com.adxchange.utils.ADXchange.getStates(ADXchange.java:402) 
     at org.apache.jsp.homepage_jsp._jspService(homepage_jsp.java:252) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper 
.java:388) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3 
13) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl 
icationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF 
ilterChain.java:206) 
     at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatc 
her.java:416) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl 
icationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF 
ilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV 
alve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV 
alve.java:191) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j 
ava:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j 
ava:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal 
ve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav 
a:293) 
     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcesso 
r.java:877) 
     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.pr 
ocess(Http11AprProtocol.java:594) 
     at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:16 
75) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: java.net.ConnectException: Connection timed out: connect 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
     at java.net.Socket.connect(Socket.java:529) 
     at java.net.Socket.connect(Socket.java:478) 
     at java.net.Socket.<init>(Socket.java:375) 
     at java.net.Socket.<init>(Socket.java:218) 
     at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.ja 
va:259) 
     at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) 
     ... 38 more 
getStates: Error in database connection 

它可能是一些權限問題?

編輯:

我還創建CLASSPATH在系統變量變量並添加的java \ lib中的tomcat \ lib中它路徑,但還是沒有結果。

回答

3

對不起朋友讓你查看和回答我的問題,但我找到了解決方案。其實這是我愚蠢的錯誤,我已經使用.properties文件的所有數據庫和其他可變的東西,問題是,我正在修改錯誤的屬性文件。這讓我很尷尬,因爲我爲簡單的事情創造了一團糟。無論如何,非常感謝你們的幫助。

+0

你不應該在這裏接受你的答案。如果有人回答你的問題,那麼接受他們的答案。 –

0

我想你可能需要看看tomcat的配置,這些現代設置上的一個常見錯誤是,無論是mysql或tomcat試圖使用IPV6連接,所以你需要確保你只能在IPV4上監聽它上班。

+0

哪些文件我應該查找ipv4或ipv6設置? –

+0

使用-Djava.net.preferIPv4Stack = true啓動Java VM可能有用的鏈接http://docs.oracle.com/javase/1.4.2/docs/guide/net/ipv6_guide/或者使用IPv4中的原始IP地址JDBC連接URL。 –

0

我還會看看你的Tomcat和MySQL之間是否有防火牆。您可能需要防火牆規則才能打開MySQL的端口。

您可以通過ping Tomcat服務器上的MySQL IP地址來判斷。如果你不能ping,你的應用程序也不能。

主機應該是MySQL服務器的名稱,而不是localhost。

數據庫是否與Tomcat在同一個框上運行?這不是一個好設計。

你確定MySQL正在運行嗎?你可以登錄到管理控制檯並訪問Java應用程序需要訪問的數據庫嗎?如果是,那麼Java應用程序是否使用適當的憑證? (請不要告訴我,你給它的管理員權限。)

+0

我已經爲mysql服務器端口添加了防火牆例外。是的tomcat也在同一個盒子上 –

+0

如何從tomcat ping mysql?我應該寫一個類嗎? –

+1

如果MySQL在Tomcat框中運行,則不需要防火牆例外。它們之間沒有防火牆。 – duffymo