在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;
}
}
答案 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,因为生产应用程序不会部署到云存储中。