我希望Java Appengine托管虚拟机应用程序连接到第二代云SQL实例。文档中存在差异 - 我无法弄清楚谷歌是否真的支持这!
https://cloud.google.com/appengine/docs/managed-vms/java/using-cloud-sql国家:
4:在控制台中,授予您的 App Engine 应用程序对 Google Cloud SQL 实例的访问权限。
但我认为没有办法做到这一点。在云SQL管理控制台的实例属性下,有:
授权应用程序:无
似乎没有办法授权应用程序?
然后在此页面上 https://cloud.google.com/sql/docs/dev-access 它指出:
Java 应用引擎应用程序
Java 不支持使用云 SQL 代理。
因此,您似乎无法使用Cloud SQL代理。我让这一切工作的唯一方法是向全世界开放 SQL 端口,以便托管 VM 实例可以通过其公共 IP 地址连接到它,但这是一个可怕的解决方案!
是否有实际支持的方法?谷歌的任何人都可以回答吗?
2016 年 4 月更新
我们有一个新的 Java 库,用于从托管虚拟机和其他环境连接到云 SQL 实例:https://github.com/GoogleCloudPlatform/cloud-sql-mysql-socket-factory
它仍然非常新,因此通常的警告适用,但我们在测试中没有发现任何问题。
旧答案:
我认为现在最好的选择是使用 junixsocket 库,如这篇文章中所述:https://stackoverflow.com/a/34820600
如果您使用 maven-war-plugin 来打包您的应用程序,那么添加以下两个依赖项就足够了:
<dependency>
<groupId>com.kohlschutter.junixsocket</groupId>
<artifactId>junixsocket-mysql</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>com.kohlschutter.junixsocket</groupId>
<artifactId>junixsocket-native-common</artifactId>
<version>2.0.4</version>
</dependency>
对于 Play 框架,请添加以下依赖项:
libraryDependencies += "com.kohlschutter.junixsocket" % "junixsocket-mysql" % "2.0.4"
libraryDependencies += "com.kohlschutter.junixsocket" % "junixsocket-native-common" % "2.0.4"
按如下方式配置您的播放application.conf
:
db.default.url="jdbc:mysql:///mydb?socketFactory=org.newsclub.net.mysql.AFUNIXDatabaseSocketFactory&junixsocket.file=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME"
我们希望将来能提供一些不需要使用 junixsocket 或类似库的东西。
我们将在 https://cloud.google.com/appengine/docs/managed-vms/java/using-cloud-sql 审查/修复文档,因为它存在一些问题。感谢您提请我们注意。
我终于用这个 xml 的托管 VM 运行它了:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>thmadmin-ben</application>
<version>master</version>
<threadsafe>true</threadsafe>
<vm>true</vm>
<precompilation-enabled>false</precompilation-enabled>
<manual-scaling>
<instances>1</instances>
</manual-scaling>
<beta-settings>
<setting name="cloud_sql_instances" value="xxx-ben:us-east1:yyy"/>
</beta-settings>
</appengine-web-app>
但是在遵循 rabit 漏洞之后,我认为将 TCP 数据库连接器与 Im 使用的框架(play 框架)中基于套接字的连接器交换并不容易。
真的很希望能够在云SQL实例设置中定义"允许的"AppEngine项目 - 如果没有这种能力,我将不得不在AWS上运行...