【问题标题】:Can I use a MySQL database with an App Engine application我可以将 MySQL 数据库与 App Engine 应用程序一起使用吗
【发布时间】:2010-12-11 17:15:16
【问题描述】:

我知道 App Engine 有自己的数据存储区。这对大多数情况都很好,而且相当容易使用。但是,我们有一个用于多个应用程序的 MySQL 数据库,但并非所有应用程序都是基于 Web 的。我们想使用 App Engine 的原因有很多,但想让 App Engine 应用程序访问我们的 MySQL 数据库。我找到的文档没有明确说明我是否可以这样做。有没有人做过或有说明如何做的文档的指针?

【问题讨论】:

    标签: sql mysql google-app-engine


    【解决方案1】:

    是的,你可以。

    了解 int https://cloud.google.com/sql/docs

    您可以将它与 GAE 支持的任何语言一起使用,也可以从 GAE 外部通过它进行连接。

    【讨论】:

      【解决方案2】:

      在开发过程中使用本地 MySQL 实例:

       
      
      
       import com.google.appengine.api.rdbms.AppEngineDriver;
          public static void makeConnection() {
              try {
                  if (conn == null || !conn.isValid(0)) {
                      String url = "localhost/databasename";
                      String username = "root";
                      String password = "password";
                      DriverManager.registerDriver(new AppEngineDriver());
                      String urlForConnection = "jdbc:mysql://" + url;
                      conn = DriverManager.getConnection(urlForConnection, username, password);
                  }
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
      
      // in web.xml
          <filter>
              <filter-name>_ah_DevSocketFilter</filter-name>
              <filter-class>com.google.appengine.api.socket.dev.DevSocketFilter</filter-class>
              <init-param>
                  <param-name>use-native-sockets</param-name>
                  <param-value>true</param-value>
              </init-param>
          </filter>
      
          <filter-mapping>
              <filter-name>_ah_DevSocketFilter</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>
      

      使用云

       
      
          DriverManager.registerDriver(new AppEngineDriver());
                    c = DriverManager.getConnection("jdbc:google:rdbms://instance_name/guestbook");
      
      

      【讨论】:

      • 感谢提供代码,此代码在开发过程中与本地 MySQL 实例一起使用我想知道是否可以将外部 mysql 数据库(不是云 MySql 实例)与应用程序工程(在生产期间)连接>
      • 没有。您只能使用谷歌云 sql。这是出于安全原因(只是他们不让您访问他们的网络服务)。但是您可以将 google cloud sql 与 mysql workbench 等一些桌面客户端连接,以管理您的机器上的 google cloud sql
      【解决方案3】:

      我仍处于这一切的学习阶段,但我相当肯定你现在可以通过以下几种方式做到这一点:

      • 将 Apps 脚本链接到 App Engine 并使用 JDBC 并将其墨迹到 Google
      • 将您的 SQL 数据库存储在 Google Cloud Storage 上
      • 通过电子表格脚本连接 Apps 脚本
      • 使用他们的 Cloud SQL

      “Google Apps 脚本能够通过 JDBC 与 Jdbc 服务建立连接。当前支持扩展到 MySQL、Microsoft SQL Server 和 Oracle。Apps 脚本可以轻松连接到托管在 Google Cloud SQL 上的数据库,但也可以与其他云托管平台甚至本地数据库一起使用。” https://developers.google.com/apps-script/jdbc

      (原文来自App Engine Question

      【讨论】:

        【解决方案4】:

        是的,但不是正常的,通过创建一个 Web 服务或一个简单的 php 页面作为中介并以 json 或 xml 的形式传递数据。

        【讨论】:

          【解决方案5】:

          【讨论】:

            【解决方案6】:

            【讨论】:

              【解决方案7】:

              您无法创建与数据库的直接网络连接。 overview page 概述了阻止您使用 Mysql 的主要限制——在这种情况下,主要限制是“任意网络连接”。您只能在应用引擎中进行 http(s) 调用。

              JVM 在安全的“沙盒”中运行 隔离你的环境 申请服务和安全。 沙盒确保应用程序只能 执行不干扰的操作 具有性能和可扩展性 的其他应用程序。例如,一个应用程序 无法产生线程,将数据写入 本地文件系统或 make 任意网络连接。一个应用程序 也不能使用 JNI 或其他原生 代码。 JVM 可以执行任何 Java 在 沙盒限制。

              【讨论】:

              • 我真的很想知道这个答案如何值得一票否决,尤其是在事实发生一年之后。
              • 这不再是真的了。查看 Google Cloud SQL:code.google.com/apis/sql/docs/developers_guide_java.html
              • @lukas 请注意,您仍然无法连接到外部 MySql 数据库,就像 OP 想要的那样。您只能连接到 App Engine 托管的 mysql 数据库。此外,目前您无法从 App Engine 外部连接到云托管数据库。
              【解决方案8】:

              简单的答案是:不。

              访问您的 MySQL 的方法是向它公开一个 Web 服务接口。

              【讨论】:

              • 感谢您的回答,您是说这里的 SOAP 和 RESTful Web 服务吗??
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-08-23
              • 2013-10-16
              • 2022-07-20
              • 2017-12-13
              • 1970-01-01
              相关资源
              最近更新 更多