[英]How to connect to a Cloud Foundry MySQL database connection in Java?
在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;
}
}
jayesh的答案在技術上是正確的,但基本上,在Java應用程序內部(假定為非春季)處理檢索這些信息的最佳方法是使用cloudfoundry-runtime庫: https : //github.com/cloudfoundry/vcap- java / tree / master / cloudfoundry-runtime自述文件提供了用法示例。
為了完善起見,如果使用Spring,那么事情會更容易,甚至您甚至不需要做任何特別的事情
問題在這里:
jdbc:mysql://127.0.0.1:10100
在這種情況下,您要連接到127.0.0.1,它是一個本地主機,請嘗試提供您的雲服務器的實際IP。 然后它應該工作正常。
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();
}
您正在使用來自vmc隧道的信息來嘗試連接。 這在雲上不起作用。 您需要執行jayesh顯示的操作,然后從Cloud Foundry環境中讀取連接憑據。 埃里克的答案更加完整:-)
我也有同樣的問題。 您必須注意“ 10100”是轉發到mysql遠程服務的端口。
您可以在本地使用它。數據庫連接指向轉發端口(101100),在本地部署程序。
但這在您將戰爭推向Cloud Foundry實例時不起作用-
一種解決方案是使用基於Spring的雲豆。 就我而言,我不想使用這種方法,所以我正在嘗試另一種解決方案...
我不知道一旦使用Cloud Foundry更改轉發端口並使用默認mysql端口(3360)為遠程連接創建的憑據(用戶,密碼,tc)是否可以建立連接
就我而言,我不想使用Spring Cloud Beans,因為生產應用程序不會部署到雲存儲中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.