我已经使用App Engine标准环境为Java应用程序成功地将Cron作业部署到App Engine。它成功部署,但是cron作业失败,并且当我检查日志时,它没有调用正确的服务:
"GET /my-app HTTP/1.1" 404 - - "AppEngine-Google; (+http://code.google.com/appengine)"
"my-project.appspot.com"
其他正在执行的cron作业如下所示(请注意,最后一部分显示了服务名称,而不仅仅是项目名称):
"GET /my-app HTTP/1.1" 404 - - "AppEngine-Google; (+http://code.google.com/appengine)"
"my-service.my-project.appspot.com"
这是我的 cron.xml :
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/my-app</url>
<description>my app</description>
<schedule>every 1 minutes from 00:00 to 23:00</schedule>
<timezone>Europe/Paris</timezone>
</cron>
</cronentries>
还有我的 web.xml :
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>my-app</servlet-name>
<servlet-class>com.my.package.MyApp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>my-app</servlet-name>
<url-pattern>my-app</url-pattern>
</servlet-mapping>
</web-app>
还有我的servlet定义(这是一个使用Java servlet的Cloud Endpoint应用程序):
@WebServlet(
name = "my-app",
urlPatterns = {"/my-app"}
)
public class MyApp extends HttpServlet {
...
还有我的 appengine-web.xml :
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
....
<application>my-project</application>
<service>my-app</service>
....
</appengine-web-app>
为什么cron作业没有调用该服务?该服务也已正确部署。
答案 0 :(得分:1)
我的 cron.xml 需要一个与我的 appengine-web.xml
中的<target>
匹配的<service>
cron.xml
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/my-app</url>
<!-- <target> required -->
<target>my-app</target>
<description>my app</description>
<schedule>every 1 minutes from 00:00 to 23:00</schedule>
<timezone>Europe/Paris</timezone>
</cron>
</cronentries>
appengine-web.xml
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
....
<application>my-project</application>
<!-- cron <target> must match service -->
<service>my-app</service>
....
</appengine-web-app>
答案 1 :(得分:1)
以下示例创建了一个日常运行的基本cron作业:
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/tasks/summary</url>
<target>beta</target>
<description>daily summary job</description>
<schedule>every 24 hours</schedule>
</cron>
</cronentries>
目标规范是可选的,是a的名称 服务/版本。目标(如果存在)位于您应用的 主机名,导致将作业路由到该服务/版本。如果不 指定目标后,作业将以默认版本运行 为流量配置的服务。
我认为这就是您的情况。由于您尚未指定target
,因此cron作业正在默认服务上命中/ my-app路由。在目标中提及服务名称。