将 servlet 映射到 cron url?
Map a servlet to a cron url?
如何将 servlet 映射到 cron url?此问题来自以下 post 中对答案的评论:Use Cron jobs with Appengine Endpoints API
在我的项目中,cron 作业被调用,如 Google App Engine 中的日志所示,并且 url https://[url-commented-out].appspot.com/_ah/api/stocksApi/v1/stocks 在网络浏览器中测试时正确执行 returns 正确的值。
但是我在 GAE 中尝试 运行 时收到错误 405:此 URL 不支持 HTTP 方法 GET。我读过 https://cloud.google.com/appengine/docs/java/config/cron 我在 cron.xml 文件中的代码是:
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/_ah/api/stocksApi/v1/stocks</url>
<description>Backend Process Stocks</description>
<schedule>every 1 minutes from 11:10 to 11:30</schedule>
<timezone>America/New_York</timezone>
</cron>
</cronentries>
我的 web.xml 是:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<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>
[package].StocksEndpoint</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SystemServiceServlet</servlet-name>
<url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SystemServiceServlet</servlet-name>
<url-pattern>/_ah/api/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>cron</web-resource-name>
<url-pattern>/_ah/api/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<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>
</web-app>
我正在使用 Android Studio 并通过遵循 HelloEndpoints 添加了一个后端模块,我有一个 StocksEndpoint.java
带有 getStocks() 的文件; returns 股票的方法。
不幸的是,/_ah/api
下的网址受到限制,无法从您的应用程序中调用。
有几种方法可以解决这个问题,但最被接受的选择通常是使用常规 servlet 来为 Cron 请求提供服务,而不是连接到端点。
首先为您的 cron 添加一个 servlet 映射到 web.xml:
<!-- stock servlet -->
<servlet>
<servlet-name>StockServlet</servlet-name>
<servlet-class>YOUR.PACKAGE.HERE.StockServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StockServlet</servlet-name>
<url-pattern>/cron/stocks</url-pattern>
</servlet-mapping>
确保为您的 servlet 更新 servlet class!
然后最后将新的 cron url 放入你的 cron.xml:
<cron>
<url>/cron/stocks</url>
<description>Backend Process Stocks</description>
<schedule>every 1 minutes from 11:10 to 11:30</schedule>
<timezone>America/New_York</timezone>
</cron>
如何将 servlet 映射到 cron url?此问题来自以下 post 中对答案的评论:Use Cron jobs with Appengine Endpoints API
在我的项目中,cron 作业被调用,如 Google App Engine 中的日志所示,并且 url https://[url-commented-out].appspot.com/_ah/api/stocksApi/v1/stocks 在网络浏览器中测试时正确执行 returns 正确的值。
但是我在 GAE 中尝试 运行 时收到错误 405:此 URL 不支持 HTTP 方法 GET。我读过 https://cloud.google.com/appengine/docs/java/config/cron 我在 cron.xml 文件中的代码是:
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/_ah/api/stocksApi/v1/stocks</url>
<description>Backend Process Stocks</description>
<schedule>every 1 minutes from 11:10 to 11:30</schedule>
<timezone>America/New_York</timezone>
</cron>
</cronentries>
我的 web.xml 是:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<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>
[package].StocksEndpoint</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SystemServiceServlet</servlet-name>
<url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SystemServiceServlet</servlet-name>
<url-pattern>/_ah/api/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>cron</web-resource-name>
<url-pattern>/_ah/api/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<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>
</web-app>
我正在使用 Android Studio 并通过遵循 HelloEndpoints 添加了一个后端模块,我有一个 StocksEndpoint.java 带有 getStocks() 的文件; returns 股票的方法。
不幸的是,/_ah/api
下的网址受到限制,无法从您的应用程序中调用。
有几种方法可以解决这个问题,但最被接受的选择通常是使用常规 servlet 来为 Cron 请求提供服务,而不是连接到端点。
首先为您的 cron 添加一个 servlet 映射到 web.xml:
<!-- stock servlet -->
<servlet>
<servlet-name>StockServlet</servlet-name>
<servlet-class>YOUR.PACKAGE.HERE.StockServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StockServlet</servlet-name>
<url-pattern>/cron/stocks</url-pattern>
</servlet-mapping>
确保为您的 servlet 更新 servlet class!
然后最后将新的 cron url 放入你的 cron.xml:
<cron>
<url>/cron/stocks</url>
<description>Backend Process Stocks</description>
<schedule>every 1 minutes from 11:10 to 11:30</schedule>
<timezone>America/New_York</timezone>
</cron>