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アプリ内でこれらの情報を取得するための最良の方法は(非スプリングを想定)、cloudfoundry-runtimeライブラリを使用することです:https ://github.com/cloudfoundry/vcap- java / tree / master /cloudfoundry-runtimeREADMEには使用例があります。

完全を期すために、Springを使用すると、事態はさらに簡単になり、特別なことをする必要さえない可能性があります。

于 2013-01-13T21:38:18.670 に答える
1

私も同じ問題を抱えてる。「10100」は mysql リモート サービスへのポート フォワーディングであることに注意してください。

これはローカルでのみ使用できます。転送ポート (101100) を指すデータベース接続を使用して、プログラムをローカルに展開します。

しかし、戦争を Cloud Foundry インスタンスにプッシュすると、これは機能しません。

1 つの解決策は、Spring ベースのクラウド Bean を使用することです。私の場合、このアプローチを使用したくないので、別の解決策を試しています...

リモート接続用に作成された資格情報 (ユーザー、パスワード、tc) を使用して、war を Cloud Foundry にプッシュし、転送ポートを変更してデフォルトの mysql ポート (3360) を使用すると、接続を確立できるかどうかはわかりません。

私の場合、Spring Cloud Beansは使用したくありません。これは、本番アプリケーションがクラウド ストレージにデプロイされないためです。

于 2013-01-14T13:52:58.843 に答える
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 に答える