App Engine 柔性环境中的 Java 快速入门

本快速入门介绍如何构建一个显示简短消息的 App Engine 小应用。

准备工作

本快速入门假定您已安装 Java SE 8 开发工具包 (JDK)

在运行和部署本快速入门之前,请安装 Cloud SDK,然后为 App Engine 设置 GCP 项目:

  1. 下载并安装 Cloud SDK:

    下载 SDK

    注意:如果您已安装 Cloud SDK,请通过运行以下命令进行更新:

    gcloud components update
    
  2. 创建新项目:

    gcloud projects create [YOUR_PROJECT_NAME] --set-as-default
    

    验证项目是否已创建:

    gcloud projects describe [YOUR_PROJECT_NAME]
    

    您会看到如下所示的项目详细信息:

    createTime: year-month-hour
    lifecycleState: ACTIVE
    name: project-name
    parent:
    id: '433637338589'
    type: organization
    projectId: project-name-id
    projectNumber: 499227785679
    
  3. 初始化您的项目的 App Engine 应用并选择应用的区域:

    gcloud app create --project=[YOUR_PROJECT_NAME]
    

    系统提示时,选择您希望 App Engine 应用所在的区域

  4. 确保您的项目已启用结算功能。要将应用部署到 App Engine,您需要将结算帐号链接到您的项目。

    启用结算功能

  5. 安装以下必备组件:

App Engine 位置

App Engine 具有区域性,这意味着运行您应用的基础架构位于特定区域中,并且由 Google 托管,以便在此区域内的所有地区以冗余方式提供。

选择要在哪个区域运行应用时,首先要考虑该区域是否能满足延迟、可用性或耐用性要求。您通常可以选择离应用的用户距离最近的区域,但也应考虑应用使用的其他 GCP 产品和服务所在的位置。跨多个位置使用服务可能会影响应用的延迟及价格

App Engine 现可在以下区域使用:

  • northamerica-northeast1(蒙特利尔)
  • us-central(爱荷华)
  • us-west2(洛杉矶)
  • us-east1(南卡罗来纳)
  • us-east4(北弗吉尼亚)
  • southamerica-east1(圣保罗)
  • europe-west(比利时)
  • europe-west2(伦敦)
  • europe-west3(法兰克福)
  • asia-northeast1(东京)
  • asia-east2(香港)
  • asia-south1(孟买)
  • australia-southeast1(悉尼)

应用的区域一经设置,便无法更改。

如果您已经创建 App Engine 应用,则可以通过运行 gcloud app describe 命令或打开 GCP Console 中的 App Engine 信息中心来查看所在区域。您的 App Engine 应用所属的区域列在 http://[YOUR_PROJECT_ID].appspot.com 下。

下载 Hello World 应用

我们创建了一个简单的 Java 版 Hello World 应用,以便您可以快速了解如何将应用部署到 App Engine 柔性环境。请按照以下步骤,使用命令行将 Hello World 下载到本地机器上。

  1. 将 Hello World 示例应用代码库克隆到本地机器。

    git clone https://github.com/GoogleCloudPlatform/getting-started-java
    

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

  2. 切换到包含示例代码的目录。

    cd getting-started-java/helloworld-servlet
    

在本地机器上运行 Hello World

  1. 使用 Jetty Maven 插件启动本地 Jetty 网络服务器。

    mvn jetty:run-exploded
    
  2. 在网络浏览器中输入以下地址:

    http://localhost:8080

页面中随即显示示例应用发出的 Hello World 消息。在终端窗口中,按 Ctrl+C 退出网络服务器。

在 App Engine 上部署和运行 Hello World

要将应用部署到 App Engine 柔性环境,请执行以下操作:

  1. 通过在 helloworld 目录运行以下命令来部署 Hello World 应用:

    gcloud config set project YOUR_PROJECT_ID
    mvn appengine:deploy
  2. 启动浏览器,然后访问 http://YOUR_PROJECT_ID.appspot.com 以查看应用

    gcloud app browse
    其中 YOUR_PROJECT_ID 表示您的 GCP 项目 ID。

此时,在 App Engine 实例上运行的网络服务器会提供显示 Hello World 消息的页面。

恭喜! 您已将第一个 Java 应用部署到 App Engine 柔性环境!

如需了解有关清理的信息以及可执行的后续步骤的链接,请参阅以下部分。

清理

为避免产生费用,您可以删除 GCP 项目,以免系统对该项目中使用的所有资源计费。

  1. 在 GCP Console 中,转到“项目”页面。

    转到“项目”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除项目选择项目名称旁边的复选框后,点击“删除项目”
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤

了解整个平台

知道如何开发和部署 App Engine 应用后,您现在可以来了解 GCP 的其余部分。您已经安装了 Cloud SDK,因此便有了与 Cloud SQL、Cloud Storage、Cloud Datastore 等产品进行交互的工具。

有关如何创建使用整个平台(而不仅仅是 App Engine)的应用的操作指南,请查看我们关于创建 Bookshelf 应用的快速入门。

了解 App Engine 柔性环境

以下主题有助于您继续了解 App Engine。

Hello World 代码审核

Hello World 是最简单的 App Engine 应用,因为它只包含一项服务,只有一个版本,并且所有代码都位于应用的根目录中。本部分详细介绍各应用文件。

HelloServlet.java

HelloServlet.java 文件用于指定网址格式,说明应用侦听请求的位置,并使用“Hello World”消息响应任何请求。

@SuppressWarnings("serial")
@WebServlet(name = "helloworld", value = "/")
public class HelloServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    PrintWriter out = resp.getWriter();
    out.println("Hello, world - Flex Servlet");
  }
}

app.yaml

app.yaml 文件描述了应用的部署配置:

runtime: java
env: flex

handlers:
- url: /.*
  script: this field is required, but ignored

runtime_config:  # Optional
  jdk: openjdk8
  server: jetty9

manual_scaling:
  instances: 1

在以上示例中,app.yaml 指定了应用使用的运行时,并设置了 env: flex 以指定应用使用柔性环境

pom.xml

Hello World 还包含一个 pom.xml 文件,其中包含有关项目的信息(例如其依赖项和构建目标)。

<project>                               <!-- REQUIRED -->

  <modelVersion>4.0.0</modelVersion>    <!-- REQUIRED -->
  <packaging>war</packaging>            <!-- REQUIRED -->

  <groupId>com.example.flex.helloworld</groupId>
  <artifactId>helloworld-servlet</artifactId> <!-- Name of your project -->
  <version>1.0-SNAPSHOT</version>       <!-- xx.xx.xx -SNAPSHOT means development -->

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source> <!-- REQUIRED -->
    <maven.compiler.target>1.8</maven.compiler.target> <!-- REQUIRED -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <failOnMissingWebXml>false</failOnMissingWebXml> <!-- REQUIRED -->
    <appengine.maven.plugin>1.3.2</appengine.maven.plugin>
    <jetty.maven.plugin>9.4.3.v20170317</jetty.maven.plugin>
  </properties>

  <parent>                              <!-- Get parameters and allow bulk testing -->
    <artifactId>getting-started-java</artifactId>
    <groupId>com.example</groupId>
    <version>1.0.0</version>
    <relativePath>..</relativePath>
  </parent>

  <dependencies>
    <dependency>                        <!-- REQUIRED -->
      <groupId>javax.servlet</groupId>  <!-- Java Servlet API -->
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>           <!-- Provided by the Jetty Servlet Container -->
    </dependency>
  </dependencies>

  <build>
    <!-- For hot reload of the web application when using an IDE Eclipse / IDEA -->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>

    <plugins>

      <plugin>                          <!-- Used for local debugging -->
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty.maven.plugin}</version>
      </plugin>

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>${appengine.maven.plugin}</version>
        <configuration>
          <!-- deploy configuration -->
<!--
          <deploy.promote>true</deploy.promote>                           <!~~ DEFAULT value ~~>
          <deploy.stopPreviousVersion>true</deploy.stopPreviousVersion>   <!~~ DEFAULT value ~~>
 -->
        </configuration>
      </plugin>

    </plugins>
  </build>
</project>
  • 如需详细了解 pom.xml 文件,请参阅 Maven 文档
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Java 版 App Engine 柔性环境文档