我一直试图使用Objectify在我的Endpoints项目中获得热身请求,但似乎没有任何效果。我错过了什么吗?我尝试了两种方法:
的servlet:
public class WarmUpServ extends HttpServlet {
static {
ObjectifyService.factory().register(CounterEnt.class);
ObjectifyService.factory().register(CounterShard.class);
}
@Override
public void init() throws ServletException {
super.init();
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException,IOException {
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
的web.xml
<servlet>
<servlet-name>warm-up</servlet-name>
<servlet-class>com.myapp.backend.WarmUpServ</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>warm-up</servlet-name>
<url-pattern>/war-up</url-pattern>
</servlet-mapping>
我也试过一个听众:
public class WarmUpServListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ObjectifyService.factory().register(CounterEnt.class);
ObjectifyService.factory().register(CounterShard.class);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
的web.xml
<listener>
<listener-class>com.myapp.backend.WarmUpServListener</listener-class>
</listener>
注意:我需要以这种方式注册我的实体,因为我有一个直接使用ObjectifyService
的依赖项。
答案 0 :(得分:1)
不保证提出预热请求。
https://cloud.google.com/appengine/docs/standard/java/warmup-requests/
如果为您的应用程序App Engine启用了预热请求 尝试检测应用程序何时需要新实例 启动预热请求以初始化新实例。然而, 这些检测尝试在每种情况下都不起作用。结果,你 即使启用了预热请求,也可能会遇到加载请求 在你的应用程序中例如,如果您的应用没有提供流量,那么第一个 对应用程序的请求始终是加载请求,而不是预热 请求。
使用ServletContextListener
代替;在每个实例开始时将始终调用一次。