谷歌应用引擎cron工作后端

时间:2014-03-20 10:56:10

标签: java google-app-engine cron backend

我将我的cron.xml和backends.xml配置为在google app引擎上运行,如下所示:

cron.xml

<cronentries>
    <cron>
        <url>/_ah/start</url>
        <schedule>every 5 minutes</schedule>
        <target>updatebackend</target>
    </cron>
</cronentries>

backends.xml

<backends>
    <backend name="updatebackend">
        <class>B1</class>
        <options>
            <dynamic>true</dynamic>
            <public>false</public>
        </options>
    </backend>
</backends>

然后在我的web.xml文件中,我写了如下:

的web.xml

  <servlet>
    <servlet-name>update</servlet-name>
    <servlet-class>com.test.UpdateBackendServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>update</servlet-name>
    <url-pattern>/_ah/start</url-pattern>
  </servlet-mapping>

  <security-constraint>
    <web-resource-collection>
        <web-resource-name>mybackend</web-resource-name>
        <url-pattern>/_ah/start</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

但是当我在谷歌应用引擎上部署并运行它时,它总是运行两次。我的问题是:

  1. 如何在/ _ah / start之外创建另一个url-pattern?
  2. 如何让它只运行一次?
  3. 感谢。

1 个答案:

答案 0 :(得分:0)

实际上,您不能使用/_ah/start作为请求的处理程序 - 它是为了启动后端实例而保留的。您应该使用不同的处理程序。例如:

<url>/update</url>
<url-pattern>/update</url-pattern>

现在,当您致电/update时,App Engine将使用现有的后端实例,或者它将自动发出/_ah/start以启动新实例。您不需要自己致电/_ah/start,除非您想在发送任何其他请求之前启动您的实例。