0

在 Cloud Foundry 上创建 mysql 作为服务并通过隧道连接到 mysql 数据库,这为我提供了到 mysql 数据库的连接字符串,我将该信息传递给我的应用程序。它可以在我的机器上运行,但是当我在 Cloud Foundry 服务器上部署该应用程序时,它会出现连接错误

这是我的连接代码,告诉我需要更改哪些内容才能部署到 Cloud Foundry

public class DB {
    private static Connection connection = null;
    public static Connection getConnection() {
        String url = "jdbc:mysql://127.0.0.1:10100/db8dad2d02e114ef6bc9d24e68367e33e";
        try {

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(url,"uC0ag3NRJCT8c","p1nyZ38zadwfa");
            System.out.println("Connect success fully");
            return connection;

        } catch (Exception e) {
            System.out.println("Error");
            System.out.println(e);
            e.printStackTrace();

        }
        return null;

    }

}
4

5 回答 5

2

jayesh 的回答在技术上是正确的,但基本上,在 Java 应用程序中(假设非 Spring)处理检索这些信息的最佳方法是使用 cloudfoundry-runtime 库:https ://github.com/cloudfoundry/vcap- java/tree/master/cloudfoundry-runtime README 中有使用示例。

为了完整性,如果使用 Spring,那么事情就更容易了,你甚至不需要做任何特别的事情

于 2013-01-13T21:38:18.670 回答
1

问题在这里:

jdbc:mysql://127.0.0.1:10100

在此您连接到 127.0.0.1,它是一个本地主机,尝试提供您的云服务器的实际 IP。然后它应该可以正常工作。

于 2013-01-13T04:56:40.330 回答
1

您正在使用来自 vmc 隧道的信息来尝试连接。这不适用于云。您需要执行 jayesh 显示的操作,并改为从 Cloud Foundry 环境中读取连接凭据。埃里克的回答更加完整:-)

于 2013-01-13T22:15:35.497 回答
1
    try {

        String vcap_services = System.getenv("VCAP_SERVICES");
        String hostname = "";
        String dbname = "";
        String user = "";
        String password = "";
        String port = "";
                //for cloud config
        if (vcap_services != null && vcap_services.length() > 0) {
            JsonRootNode root = new JdomParser().parse(vcap_services);

            JsonNode mysqlNode = root.getNode("mysql-5.1");
            JsonNode credentials = mysqlNode.getNode(0).getNode(
                    "credentials");

            dbname = credentials.getStringValue("name");
            hostname = credentials.getStringValue("hostname");
            user = credentials.getStringValue("user");
            password = credentials.getStringValue("password");
            port = credentials.getNumberValue("port");

            String dbUrl = "jdbc:mysql://" + hostname + ":" + port + "/"
                    + dbname;
            System.out.println(dbUrl);
            System.out.println(user + "password " + password);

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(dbUrl, user, password);
            return connection;
        } else {
//for local configuration
            Class.forName("com.mysql.jdbc.Driver");
            String url = jdbc:mysql://127.0.0.1:10100/db8dad2d02e114ef6bc9d24e68367e33e

            connection = DriverManager.getConnection(url, "user name",
                    "password");
            return connection;

        }

    } catch (Exception e) {

        e.printStackTrace();

    }
于 2013-01-13T05:39:41.333 回答
1

我也有同样的问题。你必须注意到“10100”是一个转发到mysql远程服务的端口。

你可以在本地使用它。在本地部署你的程序,你的数据库连接指向转发端口(101100)。

但是,当您将战争推送到 Cloud Foundry 实例时,这将不起作用 -

一种解决方案是使用基于 Spring 的云 bean。就我而言,我不想使用这种方法,所以我正在尝试另一种解决方案......

我不知道使用为远程连接创建的凭据(用户、密码、tc)是否可以在将战争推送到 Cloud Foundry 更改转发端口并使用默认 mysql 端口(3360)后建立连接

就我而言,我不想使用Spring Cloud Beans,因为生产应用程序不会部署到云存储中。

于 2013-01-14T13:52:58.843 回答