1

我一直假设静态初始化(例如对于我的持久性库)将在给定实例的请求之间持续存在?突然我想到也许我错了——也许我的应用程序的初始化对于每个请求都会重做,即使是在温暖的实例上也是如此。

这就是我问的原因:

我有一个接收实体列表并保存它们的请求处理程序(它恰好是一个 Google 端点,但我认为这不相关)。

实体可以是 20 种不同类型中的任何一种,因此我的静态初始化“注册”了所有 20 种不同的实体类型。我碰巧正在使用objectify,所以它看起来像这样:

@Api(name = "myendpoint")
public class MyEndpoint {
  static {
    ObjectifyService.register( EntityOne.class );
    ObjectifyService.register( EntityTwo.class );
    ... x20
  }

如果它正在为每个请求进行所有这些“注册”,那么我最好将其更改为仅注册请求所需的实体。

(另一方面,如果我是对的并且我的静态初始化仅在创建新实例时完成,那么我应该将尽可能多的初始化放入静态初始化中。)

4

2 回答 2

4

加载类时,静态初始化程序块运行一次。

于 2013-11-14T22:23:09.907 回答
1

是的,静态初始化块仅在加载类时运行。这意味着每个 GAE 实例只发生一次。

其他值得考虑的事情:通常最好通过您自己的 Objectify 服务类向 Ofy 注册这些类,然后使用它来访问 Objectify 功能。请参阅https://code.google.com/p/objectify-appengine/wiki/BestPractices ... 这可确保在发生任何数据存储访问之前运行块。

于 2013-11-14T22:42:05.337 回答