如何在Java中连接到Cloud Foundry MySQL数据库连接?

时间:2013-01-13 04:39:26

标签: java database deployment cloudfoundry

在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;

    }

}

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

问题出在这里:

jdbc:mysql://127.0.0.1:10100

在这里你连接到127.0.0.1,它是一个localhost,尝试提供你的云服务器的实际IP。然后它应该工作正常。

答案 2 :(得分: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();

    }

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我有同样的问题。您必须注意“10100”是一个对mysql远程服务进行控制的端口。

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

但是当你将战争推向Cloud Foundry Instance时,这将不起作用 -

一种解决方案是使用基于Spring的云计算bean。在我的情况下,我不想使用这种方法,所以我正在尝试另一种解决方案......

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

在我的情况下,我不想使用Spring Cloud Beans,因为生产应用程序不会部署到云存储中。