产生的原因:java.net.NoRouteToHostException:没有到主机的路由

问题描述:

我试图从openshift日食部署我州的项目,我在尾部文件收到此错误Caused by: java.net.NoRouteToHostException: No route to host产生的原因:java.net.NoRouteToHostException:没有到主机的路由

当我有这样的前

String host = "jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/bustrackerserver" 

我得到这个错误:

'java.lang.NumberFormatException: For input string: “OPENSHIFT_MYSQL_DB_PORT”'

  • 我已经ping通这个IP地址127.10.230.440和我得到的回应
  • 我检查是否有一些端口8080,3306正在使用从我的本地mashine,但他们只是从日食使用。

Apple class。

package org.busTracker.serverSide; 


import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.Map; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

/** 
* Root resource (exposed at "myresource" path) 
*/ 
@Path("myresource") 
public class Apple { 

    //String host = " jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/serv‌​erside"; 
    //String host = "jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/bustrackerserver"; 
    String host = "jdbc:mysql://127.10.230.440:3306/bustrackerserver"; 
    String user = "adminNMccsBr"; 
    String password = "K3SV5rbxh8qP"; 


    /** 
    * Method handling HTTP GET requests. The returned object will be sent 
    * to the client as "text/plain" media type. 
    * 
    * @return String that will be returned as a text/plain response. 
    */ 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getIt() { 

     Connection conn = null; 
     try {  
      Class.forName("com.mysql.jdbc.Driver");  
      System.out.println("Connecting to database…");  
      conn = DriverManager.getConnection(host,user,password);  

      Map<String, String> env = System.getenv(); 
      for (String envName : env.keySet()) { 
       System.out.format("%s=%s%n", 
           envName, 
           env.get(envName)); 
      } 



     } catch (Exception e) {  
      e.printStackTrace();  
     } finally {  
      if (conn != null) {  
      try {  
       conn.close();  
      } catch (SQLException e) {  
       // ignore  
      }  
      }  
     } 

     return "Hello, from apple class 14.05.15 13:30!"; 
    } 
} 
+1

您是否知道'127.x.x.x地址是回送地址?他们不会离开本地机器/虚拟机。 –

+0

@StephenC:hm我不真的知道这是什么意思,但我用环境变量试了一下,我得到了这个错误'java.lang.NumberFormatException:对于输入字符串:“OPENSHIFT_MYSQL_DB_PORT'还有什么我必须用它来替换它? – MrPencil

+0

我只想在servlet容器中部署我的Jersey项目(Tomcat 7,phpmyadmin,mysql 5.5)。这是否与openshift管理? – MrPencil

你的MySQL是监听TCP/IP,因此你试图连接失败。你有点回答了你的问题,当你说:

I checked whether some of the port 8080, 3306 are being used from my local mashine but they are just being used from eclipse.

换句话说,MySQL是监听本地主机。要另外确认一下,请尝试从命令提示符连接到MySQL:

mysql -u adminNMccsBr -h 127.10.230.440 -p YOUR_DB_NAME 

我预计这会失败。解决您的问题的方法是将MySQL配置为在本地主机上侦听。在/etc/my.cnf配置文件,在[mysqld]项下,添加以下内容:

bind-address = 127.10.230.440 

这不是Java的问题,这是一个MySQL的问题。

+0

我试图从提示符下执行你的命令。命令,但我越来越像'命令MySQL无法被识别'。在my.ini文件中,我有'#bind-address =“127.0.0.1”'我将它改为'bind-address =“127.10.230.440”'但没有任何改变。但是我也注意到了,我尝试从XAMPP访问'phpmyadmin',但我无法再继续操作。我认为这是在eclipse中安装openshift插件的情况,而不是因为这行改成了'bind-address =“127.10.230.440”'因为我把这行设置为旧状态,但我仍然无法访问我的phpmyadmin 。 – MrPencil

+0

因为XAMMP也在3306端口上列出了问题吗?我现在在XAMMP的GUI上看到了它。我正在使用widnows 8. – MrPencil

+0

尝试杀死XAMMP,看看会发生什么。你应该真的尝试从命令行连接到MySQL,因为你想排除来自Java层的任何潜在问题。如果你不能从命令行连接,那么MySQL的问题仍然存在。 –