我的目标:让一个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
答案 0 :(得分:0)
您正尝试登录INFO级别,但是在更严格的WARN级别配置了日志记录。修改logging.properties以设置level = INFO。
答案 1 :(得分:0)
我一直在部署不同的版本&#34;从Android Studio到Google App Engine。
显然,只有在使用版本1时,所有内容才会更新。我不知道原因,但这就是发生的事情。