【发布时间】:2020-01-25 21:10:02
【问题描述】:
我们正计划将在 Java 8 的 Google App Engine 标准环境上运行的内部应用从现在被取代的 App Engine APIs 迁移到推荐的 Cloud Firestore in Datastore Mode 客户端库,以便能够移植到其他执行环境。
除了缺少 IN/OR 查询运算符的一系列问题外,我们还在为本地测试设置而苦苦挣扎:根据Using the Java 8 Local Development Server
开发网络服务器使用本地模拟数据存储 文件支持的数据存储在您的计算机上。数据存储名为 local_db.bin,它是在应用程序的 WAR 目录中创建的, 在 WEB-INF /appengine-generated/ 目录中。
但我们不知道如何将 Google Cloud Client Library for Datastore 连接到本地模拟器。
使用
定义默认凭据gcloud auth application-default login
或在获取服务帐户的凭据后设置GOOGLE_APPLICATION_CREDENTIALS 环境变量
gcloud iam service-accounts keys create key.json \
--iam-account=project-id@appspot.gserviceaccount.com
正如其他地方所建议的那样,根据ADC 策略,只会导致客户端库连接到实际的云服务器,而不是本地模拟器。
我希望开发服务器自动向客户端库提供连接提示,但显然不是这样。
考虑到我们不能只迁移到独立的Datastore Emulator,因为我们需要目前仅由 App Engine 开发服务器提供的其他服务(例如电子邮件提交),有什么建议设置本地测试环境吗?
编辑 / 经过进一步的修改,我们正在通过使用本地开发服务器和独立的数据存储模拟器来解决这个问题:
gcloud beta emulators datastore start \
—project=project-id \
--host-port=localhost:8081 \
--data-dir=target/war
DATASTORE_EMULATOR_HOST=localhost:8081 java_dev_appserver.sh \
--port=8080 \
target/war
但是,该过程非常繁琐且难以自动化:我们正在寻找一种在启动应用程序时自动将 Google 客户端库连接到由 Java 8 本地开发服务器管理的数据存储模拟器的方法 @ 987654326@,例如mvn appengine:run.
【问题讨论】:
标签: google-app-engine google-cloud-datastore