【问题标题】:Caused by: java.net.NoRouteToHostException: No route to host引起:java.net.NoRouteToHostException:没有路由到主机
【发布时间】:2015-05-14 13:00:02
【问题描述】:

我正在尝试在 openshift 上从 eclipse 部署我的 Jersey 项目,我在尾部文件中收到此错误 Caused by: java.net.NoRouteToHostException: No route to host

以前我有过这样的事情:

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

我收到了这个错误:

'java.lang.NumberFormatException: 对于输入字符串:“OPENSHIFT_MYSQL_DB_PORT”'

  • 我已经ping了这个IP地址127.10.230.440,我得到了回复
  • 我检查了我的本地机器是否正在使用某些端口 8080、3306,但它们只是在 eclipse 中使用。

苹果类。

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!";
    }
}

【问题讨论】:

  • 您知道127.x.x.x 地址是环回地址吗?他们不会离开本地机器/虚拟机。
  • @StephenC:嗯,我真的不知道这是什么意思,但我已经用环境变量尝试过了,我得到了这个错误java.lang.NumberFormatException: For input string: “OPENSHIFT_MYSQL_DB_PORT我还需要用什么来替换它?
  • 我只想在 servlet 容器中部署我的 Jersey 项目(Tomcat 7、phpmyadmin、mysql 5.5)。这可以用 openshift 管理吗?
  • 此链接解释了环回地址是什么:tcpipguide.com/free/t_IPReservedPrivateandLoopbackAddresses.htm。鉴于您不认识该术语,我怀疑这是您问题的根本原因。
  • 问题是我不得不使用System.getenv().get()来设置主机字符串` String host = "jdbc:mysql://" + System.getenv().get("OPENSHIFT_MYSQL_DB_HOST") + " :" + System.getenv().get("OPENSHIFT_MYSQL_DB_PORT") + "/serverSide";`

标签: java sql jdbc jersey openshift


【解决方案1】:

您的 MySQL 正在侦听 TCP/IP,因此您的连接尝试失败。当您说时,您有点回答了您的问题:

我检查了一些端口 8080、3306 是否正在从我的本地 mashine 中使用,但它们只是在 eclipse 中使用。

换句话说,MySQL 没有在 localhost 上监听。要以另一种方式确认这一点,请尝试从命令提示符连接到 MySQL:

mysql -u adminNMccsBr -h 127.10.230.440 -p YOUR_DB_NAME

我希望这会失败。您的问题的解决方案是将 MySQL 配置为侦听 localhost。在/etc/my.cnf 配置文件的 [mysqld] 行下,添加以下内容:

bind-address = 127.10.230.440

这不是 Java 问题,而是 MySQL 问题。

【讨论】:

  • 我试图从提示命令中执行你的命令,但我得到了类似The command mysql can not be regognized 的东西。在 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。
  • 这是一个问题,因为 XAMMP 也在列出端口 3306 吗?我现在在 XAMMP 的 GUI 上看到了它。我正在使用寡妇 8。
  • 尝试杀死 XAMMP 看看会发生什么。您真的应该尝试从命令行连接到 MySQL,因为您想排除来自 Java 层的任何潜在问题。如果无法从命令行连接,那么问题仍然在于 MySQL。
猜你喜欢
  • 1970-01-01
  • 2017-10-07
  • 2018-09-29
  • 2013-01-12
  • 1970-01-01
  • 2019-03-08
  • 2017-08-03
  • 2019-03-08
相关资源
最近更新 更多