繁体   English   中英

App Engine Java Servlet无法连接到Cloud SQL

[英]App Engine Java Servlet does not connect to Cloud SQL

我使用app引擎创建了一个java web servlet,servlet向数据库发出请求。 我已经使用本地数据库在本地测试了servlet并且它工作得很好,然后我继续在本地测试servlet但是仍然访问了Cloud SQL数据库,这也很有效。

在部署servlet之后我的问题出现了。 部署完所有数据库请求后返回以下内容:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not 
received any packets from the server.

我在云控制台中查看,我的应用程序已正确添加到访问控制选项卡下的云SQL授权应用程序引擎应用程序中。

是否有人在部署的应用引擎servlet上遇到过类似的问题? 那里有任何解决方案或建议吗? 我将不胜感激任何帮助!

更新:

使用以下代码生成上述错误以访问db

Class.forName("com.mysql.jdbc.Driver");
Url = "jdbc:mysql://<ip-address-cloudsql>:3306/<dbname>";
Connection con = DriverManager.getConnection (Url,"root",<password>);

使用此代码实现了同样的错误,请注意它与此处示例中显示的代码非常相似https://developers.google.com/appengine/docs/java/cloud-sql/

Class.forName("com.mysql.jdbc.GoogleDriver");
Url = "jdbc:google:mysql://<appID:instanceID>/<dbname>? 
user=root&password=<password>";
Connection con = DriverManager.getConnection (Url);

当我使用appid和实例id来设置url时,我按照此stackoverflow文章中的格式化提示显示: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:

使用此代码导致以下不同的错误:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

我假设它说localhost因为我的cloudsql数据库设置为遵循app引擎servlet。 另外,要知道这两种方法在本地运行servlet和访问cloud sql数据库时都能正常工作。

有什么想法吗? 我不知道还有什么可以尝试:[

从授权的App Engine应用程序连接到Cloud SQL时,不需要密码(实际上,如果您尝试使用密码连接,则会失败)。

将您的连接字符串更改为jdbc:google:mysql://<appID:instanceID>/<dbname>? user=root jdbc:google:mysql://<appID:instanceID>/<dbname>? user=root省略&password=<password>部分

如果您在访问控制设置上有应用程序引擎应用程序,那么您不需要密码,因为它是本地的,所以只需输入密码=“”; 但是,如果您正在使用远程某些东西,例如从其他主机运行的phpmyadmin,您的命令行或通过TCP,SSH或HTML运行的GCE VM,则需要输入密码=“something”; 您在访问控制中设置的内容。

对于Google上的所有人,他们都在考虑为什么您可能在连接上遇到“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure”。

如果从测试服务器进行呼叫,请确保允许使用IP。

我正在朋友家里测试,这个无益的错误不断出现。

连接到Google Cloud Sql时,您应该小心: - 关闭已打开的连接 - 在尝试创建新连接时使用指数退避算法。 有关详细信息,请参阅: https//cloud.google.com/sql/faq

如果您在Spring Boot应用application.properties中使用application.properties ,那么只需将以下行放入application.properties

spring.datasource.url: jdbc:mysql://google/<dbname>?cloudSqlInstance=<InstanceName>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=****&password=****

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM