这可以通过以下步骤来完成:
- 在 hosts 文件中创建一个条目
- 使用某些选项从终端运行 App Engine 开发服务器
-
使用带有远程调试功能的 IntelliJ 来附加 App Engine 开发服务器。
- 要在 Mac 上编辑 hosts 文件,请编辑文件 /etc/hosts 并提供与您的服务对应的域:。示例:
127.0.0.1 my-service.myapp.com
保存后,您需要重新启动计算机以使更改生效。
- 手动运行 App Engine 开发服务器:
dev_appserver.sh --address=0.0.0.0 --jvm_flag=-Xdebug
--jvm_flag=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
[path_to_exploded_war_directory]
- 在 IntelliJ 中,创建调试配置。使用远程模板创建此配置。将主机设置为您在hosts文件中设置的url,并将端口设置为8000。
您可以设置断点并在 IntelliJ 中运行应用程序。 IntelliJ 将附加到正在运行的 App Engine 开发服务器实例。
由于您在调试期间使用端口,而在生产期间将应用上传到 GAE 时并未实际使用任何端口,因此您需要添加代码来识别应用何时在本地运行以及何时在 GAE 上运行。这可以按如下方式完成:
private String mServiceUrl = "my-service.my-app.appspot.com";
...
if (SystemProperty.environment.value() != SystemProperty.Environment.Value.Production) {
mServiceUrl += ":8000";
}
见https://cloud.google.com/appengine/docs/standard/java/tools/using-local-server
一种改进的解决方案是避免完全包含端口,而不必使用代码来确定您的应用是在本地运行还是在生产服务器上运行。一种方法是使用 Charles(一个用于监视和与请求交互的应用程序)并使用称为远程映射的功能,它允许您将一个 url 映射到另一个。启用后,您可以映射如下内容:
https://my-service.my-app.appspot.com/
到
https://localhost:8080
然后,您将启用包含原始主机的选项,以便将其传送到本地开发服务器。就您的代码而言,它只看到:
https://my-service.my-app.appspot.com/
虽然启用远程映射时 IP 地址将为 127.0.0.1:8080。但是,要在本地主机上使用 https 确实需要您为 Charles 启用 ssl 证书。
有关如何在 IntelliJ 中为 GAE Java 应用程序设置和调试微服务的完整概述,请参阅:
https://github.com/JohannBlake/gae-microservices