2012-09-21 170 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