使用App Engine在本地计算机上自定义数据存储位置

我正在Android Studio中开发App Engine应用程序并在我的本地计算机上测试它(使用本地数据存储区)。 它是基于Java的应用程序。 每次重新运行服务器时,都会清除本地数据存储。 我为Python开发人员find了几个解决方案,但看起来Java没有答案。

Android Studio只允许更改:

  • 战争路径
  • VM Args
  • 服务器地址
  • 服务器端口

我尝试过使用VM args,但这些适用于Java VM而不是app服务器。 有没有办法在服务器重启后持久保存本地数据存储? 这将是完美的如果我可以直接从Android Studio运行此配置。

本地数据存储区被清除,因为它默认位于应用程序爆炸的war目录中(在每次构建时都会完全删除)。

您无需在终端上手动运行开发服务器,实际上只需将虚拟机arg添加到appengine运行配置即可在另一个位置定位数据存储:

-Ddatastore.backing_store="/path/to/datastore/file/location/local_db.bin" 

(解决方案见: https : //code.google.com/p/android/issues/detail?id = 68225 )

像Arjan所说,你可以使用-Ddatastore.backing_store

如果您使用的是Android Studio 1.5,请修改build.gradle 。 关于appengine把参数jvmFlags 。 例:

  appengine { downloadSdk = true appcfg { oauth2 = true } jvmFlags = ["-Ddatastore.backing_store=\"D:/temp/local_db.bin\""] } 

经过几个小时的搜索,我终于find了如何将用户定义的文件用作本地存储。 不幸的是,它无法直接从Android Studio运行,必须从终端运行服务器。

以下是Java的dev-appserver的参数:

 Usage:  [options]  Options: --help, -h Show this help message and exit. --sdk_root=DIR Overrides where the SDK is located. --server=SERVER The server to use to determine the latest -s SERVER SDK version. --address=ADDRESS The address of the interface on the local machine -a ADDRESS to bind to (or 0.0.0.0 for all interfaces). --port=PORT The port number to bind to on the local machine. -p PORT --disable_update_check Disable the check for newer SDK versions. --generated_dir=DIR Set the directory where generated files are created. --default_gcs_bucket=NAME Set the default Google Cloud Storage bucket name. --jvm_flag=FLAG Pass FLAG as a JVM argument. May be repeated to supply multiple flags. 

你必须改变generated_dir参数。 要直接从终端运行dev服务器,这是一个非常好的命令:

/ usr / lib / jvm / default-java / bin / java -javaagent:$ HOME / .gradle / appengine -sdk / appengine-java-sdk-1.9.9 / lib / agent / appengine-agent.jar -Xbootclasspath / p :$ HOME / .gradle / appengine-sdk / appengine-java-sdk-1.9.9 / lib / override / appengine-dev-jdk-overrides.jar -Didea.launcher.port = 7533 -Didea.launcher.bin.path = / opt / android-studio / bin -Dfile.encoding = UTF-8 -classpath $ HOME / .gradle / appengine -sdk / appengine-java-sdk-1.9.9 / lib / appengine-tools-api.jar:/ opt / android-studio / lib / idea_rt.jar com.intellij.rt.execution.application.AppMain com.google.appengine.tools.development.DevAppServerMain –address = 0.0.0.0 –port = 8080 –generated_dir = $ HOME / sandbox / $ HOME / app / backend / build / explosion-app

我已将generated_dir参数更改为--generated_dir=$HOME/sandbox/

请注意,您必须提供Android Studio路径和App Engine SDK版本。 对于我的工作站,它是/opt/android-studioappengine-java-sdk-1.9.9