App Engine Servlet类已调用但代码未运行

时间:2015-09-14 20:27:57

标签: java google-app-engine servlets cron

我的目标:让一个cron作业在servlet上运行代码。问题似乎是当在远程服务器(也就是已部署)上访问servlet时,我不断获得日志并获得200次成功。我期待其中至少有一个是真的。

cron作业似乎已正确配置。它显示在我的仪表板上并以所需的间隔开始。

cron.xml

<cronentries>
<cron>
<url>/cron/cuttingScores</url>
<description>Check for the latest cutting scores and update the data store.</description>
<schedule>every 10 minutes</schedule>
</cron>
</cronentries>

我在web.xml中定义了两个servlet,一个用于API代码,另一个用于在执行cron作业时运行的代码。

的web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
    <filter>
        <filter-name>ObjectifyFilter</filter-name>
        <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ObjectifyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>my.package.RegistrationEndpoint,
                my.package.MessagingEndpoint,
                my.package.CuttingScoreEndpoint
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>GAEJCronServlet</servlet-name>
        <servlet-classmy.package.cron.CuttingScoresCron</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>GAEJCronServlet</servlet-name>
        <url-pattern>/cron/cuttingScores</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

本地我不知道如何运行cron作业但是如果我转到localhost:8080/cron/cuttingScores则servlet代码开始执行就好了。当我将代码部署到谷歌的服务器时,cron作业启动但似乎没有实际运行代码。

以下是我的日志输出:

0.1.0.1 - - [14/Sep/2015:13:13:16 -0700] "GET /cron/cuttingScores HTTP/1.1" 200 0 - "AppEngine-Google; (+http://code.google.com/appengine)" "erudite-bonbon-106721.appspot.com" ms=8 cpu_ms=598 queue_name=__cron task_name=546233b36b39eb25a52c51 instance=00c61b117cb0545631ed291ff941b app_engine_release=1.9.26

我有很多日志,但没有一个显示。我甚至让doGet方法抛出运行时异常,没有骰子。我也没有打电话给super.doGet()!如果我尝试在浏览器中点击网址,它就是一样的。它说一切都很好,但代码实际上并没有运行!

我的servlet:

import java.io.IOException;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CuttingScoresCron extends HttpServlet {
    private static final Logger _logger = Logger.getLogger(CuttingScoresCron.class.getName());

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        _logger.info("In cron job get");
        if(true) {
            throw new RuntimeException("WTF I JUST WANT TO SEE THIS!");
        }
        super.doGet(req, resp);
    }

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        _logger.info("In cron job post");
        doGet(req, resp);
    }
}

这是我的日志配置。请记住,这是默认的日志记录配置,我看到我的所有日​​志(信息级别)都在本地运行。

logging.properties

.level = WARNING

2 个答案:

答案 0 :(得分:0)

您正尝试登录INFO级别,但是在更严格的WARN级别配置了日志记录。修改logging.properties以设置level = INFO。

答案 1 :(得分:0)

我一直在部署不同的版本&#34;从Android Studio到Google App Engine。

显然,只有在使用版本1时,所有内容才会更新。我不知道原因,但这就是发生的事情。