App Engine Java 8 运行时常见问题解答

以下问题适用于 App Engine Java 8 标准运行时。

我可以将 Kotlin 与 Java 8 运行时搭配使用吗?

可以,请查看我们 GitHub 代码库中的 Kotlin 示例

我可以将 IntelliJ IDEA 社区版与 App Engine 搭配使用吗?

可以,使用内置的 Maven 集成

您还可以使用 IntelliJ Ultimate Edition,它为您提供更多 Web 应用开发功能,同时与 App Engine 部署过程的集成更为紧密。

App Engine Cloud Endpoints v1.0 是否能在 Java 8 运行时中工作?

不能。您必须迁移到 Cloud Endpoints Frameworks 2.0 版

为什么我会收到关于重新打包类的 java.lang.NoClassDefFoundError?

重新打包的内部类(如 com/google/appengine/repackaged/com/google/common/collect/ImmutableList )在 Java 8 运行时中不再可用,即使它们在旧版 App Engine API JAR 中已定义也是如此。

如果您需要在 Java 8 应用中使用重新包装的类,请在 appengine-web.xml 中将 appengine.api.legacy.repackaging 设置为 true。例如:

<system-properties>
  <property name="appengine.api.legacy.repackaging" value="true">
</system-properties>

我们建议您使用非重新打包的公共类替换这些类。

我可以在 Java 8 和 Java 11 之间进行流量拆分吗?

可以,每个服务或模块版本都可以使用不同的运行时版本,并且支持流量拆分。

当实例没有接到请求时,如何处理 Java 8 线程?

使用 App Engine API 创建的线程会继续像以前一样工作。

自动扩缩 手动扩缩 基本扩缩
实例因缺少请求而终止。 最后一个请求后实例终止(默认值:5 分钟) 永远运行。

App Engine Java 8 运行时支持哪些元数据服务器功能?

App Engine Java 8 运行时支持以下元数据服务器网址:

/computeMetadata/v1/project/numeric-project-id (pending)
/computeMetadata/v1/project/project-id
/computeMetadata/v1/instance/zone
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email
/computeMetadata/v1/instance/service-accounts/default/scopes
/computeMetadata/v1/instance/service-accounts/default/token
/computeMetadata/v1/instance/service-accounts/{account}/aliases
/computeMetadata/v1/instance/service-accounts/{account}/email
/computeMetadata/v1/instance/service-accounts/{account}/scopes
/computeMetadata/v1/instance/service-accounts/{account}/token

元数据服务器 v1beta1

v1beta1 元数据服务器已弃用,并计划关停。请务必更新所有使用 v1 或更高版本的请求。如需了解详情,请参阅转换到 v1 元数据服务器端点

/computeMetadata/v1beta1/project/numeric-project-id  (pending)
/computeMetadata/v1beta1/project/project-id
/computeMetadata/v1beta1/instance/zone
/computeMetadata/v1beta1/instance/service-accounts/default/aliases
/computeMetadata/v1beta1/instance/service-accounts/default/email
/computeMetadata/v1beta1/instance/service-accounts/default/scopes
/computeMetadata/v1beta1/instance/service-accounts/default/token
/computeMetadata/v1beta1/instance/service-accounts/{account}/aliases
/computeMetadata/v1beta1/instance/service-accounts/{account}/email
/computeMetadata/v1beta1/instance/service-accounts/{account}/scopes
/computeMetadata/v1beta1/instance/service-accounts/{account}/token

为什么我的请求没有收到响应?

如果您针对请求创建线程池,则必须确保在当前请求终结之前明确地关闭线程池。