当用户请求重定向到新实例时,我的谷歌引擎Java应用程序会丢失所有用户数据:
"此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次加载。因此,此请求可能需要更长的时间,并且比应用程序的典型请求使用更多的 CPU。
由于这是非常不方便的行为,我尝试设置一个常驻实例,所以我将"空闲实例"设置为 1-1,但这并不能解决我的问题,我得到了一个常驻实例,并且总是有新的(动态)实例创建,它服务于一些请求......(这家伙有同样的问题:为什么 GAE 在最大空闲实例数设置为 1 的情况下启动第二个实例)
我根本不想使用动态实例(我的应用程序负载一直很低,用户不多)。我只需要向用户提供一个常驻实例。是否可以在 GAE 中设置?如果没有,是否有任何方便可靠的方法如何在页面之间保存数据(例如将它们存储在数据存储中?我在页面之间传递了很多 POST 参数。
Google App Engine是一个云平台。如果没有动态实例,您的应用设计将无法获得云平台的所有优势。
要解决数据传输问题,您可以使用以下方法之一:
-
使用标准 Java EE 会话对象。会话存储在数据存储中,因此您不会丢失它。但是,您不应忘记,由于数据存储实体大小限制,会话对象应该是可序列化的并且小于 1MB。
-
手动将数据存储在数据存储中,并在页面之间传输实体 ID。同样适用 1MB 的实体大小限制。
-
使用 BlobStore 或云存储将数据存储为文件,并在页面之间传输文件设计器。这将有助于消除1Mb的限制。
任何此方法都允许在请求之间持久化数据,但有其自身的局限性。您需要提供您的要求的详细信息才能得到明确的答案。