App Engine Servlet Class 已调用但代码未调用 运行
App Engine Servlet Class Invoked but Code Doesn't Run
我的目标:在 servlet 上有一个 cron 作业 运行 代码。问题似乎是,当在远程服务器上访问 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 代码开始执行得很好。当我将代码部署到 google 的服务器时,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
我有很多日志,其中 none 显示了。我什至让 doGet
方法抛出 运行time 异常,没有骰子。我叫super.doGet()
也没事!如果我尝试在浏览器中点击 url,结果是一样的。它说一切都很好,但代码实际上并没有 运行!
我的 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);
}
}
这是我的日志配置。请记住,这是默认的日志记录配置,我会在本地看到我所有的日志(信息级别)运行ning。
logging.properties
.level = WARNING
您正尝试在 INFO 级别登录,但在更严格的 WARN 级别配置了日志记录。修改 logging.properties 设置 level = INFO.
我一直在从 Android Studio 到 Google App Engine 部署不同的 "versions"。
显然只有在使用版本 1 时才会更新所有内容。我不知道为什么,但这就是正在发生的事情。
我的目标:在 servlet 上有一个 cron 作业 运行 代码。问题似乎是,当在远程服务器上访问 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 代码开始执行得很好。当我将代码部署到 google 的服务器时,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
我有很多日志,其中 none 显示了。我什至让 doGet
方法抛出 运行time 异常,没有骰子。我叫super.doGet()
也没事!如果我尝试在浏览器中点击 url,结果是一样的。它说一切都很好,但代码实际上并没有 运行!
我的 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);
}
}
这是我的日志配置。请记住,这是默认的日志记录配置,我会在本地看到我所有的日志(信息级别)运行ning。
logging.properties
.level = WARNING
您正尝试在 INFO 级别登录,但在更严格的 WARN 级别配置了日志记录。修改 logging.properties 设置 level = INFO.
我一直在从 Android Studio 到 Google App Engine 部署不同的 "versions"。
显然只有在使用版本 1 时才会更新所有内容。我不知道为什么,但这就是正在发生的事情。