使用 Java 和云 SQL 的 AppEngine Managed VM



我希望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上运行...

相关内容

  • 没有找到相关文章

最新更新