0

我有一个 appengine 应用程序,使用 Spring 3.1.2,并且工作得很好。驻留/动态实例使用预热正常启动:

2013-05-20 20:32:53.786 /_ah/warmup 200 27205ms 0kb

现在我正在尝试配置一个由“后端”实例处理的任务队列,但是在 /_ah/start 期间它正在记录这个意外的 HTTP 302 重定向状态代码:

2013-05-20 20:43:57.345 /_ah/start 302 50631ms 0kb instance=0

0.1.0.3 - - [20/May/2013:16:43:56 -0700] "GET /_ah/start HTTP/1.1" 302 106 - - "0.my-backend.my-application.appspot.com" ms=50597 cpu_ms=44134 cpm_usd=0.000012 loading_request=1 exit_code=111 instance=0 app_engine_release=1.8.0

I 2013-05-20 20:43:09.864 javax.servlet.ServletContext log: Initializing Spring root WebApplicationContext

...
A bunch of messages...
...

I 2013-05-20 20:43:55.659 org.springframework.web.context.ContextLoader initWebApplicationContext: Root WebApplicationContext: initialization completed in 45793 ms
I 2013-05-20 20:43:56.442 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.
E 2013-05-20 20:43:56.442 Process terminated because it failed to respond to the start request with an HTTP status code of 200-299 or 404.

我删除了 web.xml 中的 Spring Servlet 和 Filter Chain,但没有任何改变。

我还将 _ah 映射为不安全的。它在常驻实例中按预期工作,但对于后端不是:

<http security="none" pattern="/_ah/**" disable-url-rewriting="true"/>

我错过了什么吗?!?!

4

1 回答 1

0

我找到了解决方案...它与 Spring View Resolver 冲突,它试图用前缀和后缀重定向“_ah/start”:

<bean lazy-init="true"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/views/" />
  <property name="suffix" value=".jsp" />
</bean>

为了解决这个问题,我将“warmup”和“start”映射到一个空的 Servlet:

<servlet>
  <servlet-name>_ah_warmup</servlet-name>
  <servlet-class>com.my.app.EmptyWarmupServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>_ah_warmup</servlet-name>
  <url-pattern>/_ah/warmup</url-pattern>
  <url-pattern>/_ah/start</url-pattern>
</servlet-mapping>

现在后端正在按预期启动和处理任务队列!

于 2013-05-21T12:08:23.423 回答