使用 Java 本地开发服务器

Java 版 App Engine SDK 包含一个本地开发服务器,用于在您的计算机上测试应用。本地开发服务器模拟 App Engine 的 Java 运行时环境及其所有服务,包括 Datastore。

运行开发网络服务器

有关为应用设置系统属性和环境变量的信息,请参阅请求的处理方式

您还可以通过命令提示符运行开发网络服务器。要运行的命令位于 SDK 的 appengine-java-sdk/bin/ 目录中。

Windows 命令语法:

appengine-java-sdk\bin\dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Linux 或 macOS 命令语法:

appengine-java-sdk/bin/dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

该命令将应用的 WAR 目录位置当作参数。

停止开发服务器

要停止网络服务器,请按 Ctrl-C

这些命令是特定于操作系统的包装函数脚本,用于运行 Java 类 com.google.appengine.tools.KickStart(位于 appengine-java-sdk/lib/appengine-tools-api.jar 中)。

要在自动测试环境中停止服务器,您可以在启动服务器时传递 --jvm_flag=-Dappengine.allowRemoteShutdown=true 标志,然后在需要停止服务器时,向 /_ah/admin/quit 路径发送 HTTP POST 请求。

检测应用运行时环境

要确定代码是在生产环境中运行还是在本地开发服务器中运行,您可以查看 SystemProperty.environment.value() 方法的值。例如:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
   // Production
 } else {
  // Local development server
  // which is: SystemProperty.Environment.Value.Development
}

使用本地 Datastore 模拟器

开发网络服务器使用您计算机上本地基于文件的 Datastore 来模拟 Datastore。该 Datastore 名为 local_db.bin,系统会在您应用的 WAR 目录(即 WEB-INF /appengine-generated/ 目录)中创建它。该 Datastore 不随应用一起上传。

此 Datastore 在前后两次调用网络服务器之间保持不变,因此在您下次运行网络服务器时,您存储的数据仍可用。要清除 Datastore 的内容,请关闭服务器,然后删除该文件。

Datastore 索引配置中所述,开发服务器可以生成您应用所需的 Datastore 索引配置(根据您在测试服务器时服务器执行的查询确定)。这将在 WAR 中的 WEB-INF/appengine-generated/ 目录中生成名为 datastore-indexes-auto.xml 的文件。要禁用自动索引配置,请在 WEB-INF/ 目录中创建或编辑 datastore-indexes.xml 文件,并对 <datastore-indexes> 元素使用属性 autoGenerate="false"。如需了解详情,请参阅 Datastore 索引配置

在开发服务器中浏览 Datastore

要使用开发网络服务器浏览本地 Datastore,请执行以下操作:

  1. 根据上文所述启动开发服务器。
  2. 转到开发控制台
  3. 点击左侧导航窗格中的 Datastore 查看器以查看本地 Datastore 内容。

Cloud Datastore 一致性模型

默认情况下,本地 Datastore 已配置,因此那些不会立即显示在全局查询中的 Datastore 写入所占百分比设置为 10%。

要调整此一致性级别,请设置 datastore.default_high_rep_job_policy_unapplied_job_pct 系统属性,使其值对应于应用所需的最终一致性数量。

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

如果您使用命令提示符 dev_appserver.sh 设置此属性,则需要使用 --jvm_flag=... 进行设置:

appengine-java-sdk/bin/dev_appserver.sh  --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

datastore.default_high_rep_job_policy_unapplied_job_pct 的有效范围介于 0 到 100 之间。如果您使用此范围之外的数字,则会收到错误消息。

如果您使用的是 Maven,则可以使用 jvmFlags 将此标志作为参数传递给 appengine:devserver

<jvmFlags>
  <jvmFlag>-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20</jvmFlag>
</jvmFlags>

指定自动 ID 分配策略

您可以配置本地 Datastore 分配自动实体 ID 的方式。开发服务器支持以下自动 ID 分配策略:

sequential
使用连续整数序列来分配 ID。
scattered
使用近似均匀分布整数的非重复序列来分配 ID。

本地 Datastore 中的默认策略是 scattered

要指定自动 ID 策略,请将 datastore.auto_id_allocation_policy 系统属性设置为 sequentialscattered

-Ddatastore.auto_id_allocation_policy=scattered

要通过传递给 dev_appserver 宏的标志来设置此系统属性,请使用以下命令:

dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered

模拟用户帐号

开发网络服务器使用自己的登录和退出页面模拟 Google 帐号。在开发网络服务器下运行时,生成登录和退出网址的方法会在本地服务器上返回 /_ah/login/_ah/logout 的网址。

开发登录页面包含一个表单,您可以在其中输入电子邮件地址。会话将使用您输入的任何电子邮件地址作为活跃用户。

要让应用认为登录用户是管理员,请选中表单上的“以管理员身份登录”复选框。

使用网址提取

在应用使用网址提取 API 发出 HTTP 请求时,开发网络服务器直接从您的计算机中发出该请求。如果您使用代理服务器访问网站,该行为可能与在 App Engine 上运行应用时不同。

开发控制台

开发网络服务器包含一个控制台网络应用。使用该控制台,您可以浏览本地 Datastore。

要访问控制台,请访问服务器上的 /_ah/admin 网址,即 http://localhost:8080/_ah/admin

命令行参数

开发服务器命令支持以下命令行参数:

--address=...

用于该服务器的主机地址。您可能需要设置该参数,以便能够从网络上的另一台计算机访问开发服务器。地址为 0.0.0.0 时,允许执行 localhost 访问和主机名访问。默认值:localhost

--default_gcs_bucket=...

设置默认的 Google Cloud Storage 存储分区名称。

--disable_update_check

如果您指定此参数,开发服务器将不会联系 App Engine 以检查 SDK 新版本的可用性。默认情况下,服务器在启动时检查新版本,并在新版本可用时输出消息。

--generated_dir=...

设置将在其中创建生成文件的目录。

--help

输出一条帮助消息,然后退出。

--jvm_flag=...

将指定标志作为 JVM 参数传递。可以重复以提供多个标志。

--port=...

用于该服务器的端口号。默认值为 8080

--sdk_root=...

指向 App Engine Java SDK 的路径(如果与该工具的位置不同)。

--server=...

用于确定最新 SDK 版本的服务器。

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Java 版 App Engine 标准环境