是否为每个请求重复静态init?

时间:2013-11-14 22:14:56

标签: java google-app-engine objectify

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

这就是我要问的原因:

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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