【问题标题】:Google app engine No handlers matched this URLGoogle 应用引擎 没有与此 URL 匹配的处理程序
【发布时间】:2019-06-06 12:21:42
【问题描述】:

我将从我在谷歌应用程序引擎上设置的 cron 作业调用 firebase Http 请求。cron 作业已成功部署,但它没有触发 firebase url,因为我认为我在 web.xml 文件中缺少一些设置或在其他文件中。 在日志查看器中,我看到此类信息“没有处理程序匹配此 URL” 任何人有任何想法。任何将不胜感激。 以下是我的 cron.xml 设置

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
    <cron>
        <url>/cron</url>
        <target>beta</target>
        <description>Keymitt cron job</description>
        <schedule>every 1 minutes</schedule>
    </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">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>HelloAppEngine</servlet-name>
    <servlet-class>com.company.HelloAppEngine</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloAppEngine</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>KeymittCron</servlet-name>
    <servlet-class>com.company.KeymittCron</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>KeymittCron</servlet-name>
    <url-pattern>/cron</url-pattern>
  </servlet-mapping>

</web-app>

这是我关联的 WebServlet

@WebServlet(name = "KeymittCron",value = "/cron")
public class KeymittCron extends HttpServlet {
    private static final Logger _logger = Logger.getLogger(KeymittCron.class.getName());
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //  super.doGet(req, resp);
        URL url=new URL("httplink");
        HttpURLConnection connection= (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.connect();
        int requestCode=connection.getResponseCode();
        if(requestCode==200){
            _logger.info("firebase link triggered successfully");
            _logger.info("Executed cron job");
        }
        else{
            _logger.info("Error while triggering firebase link");
        }
        connection.disconnect();
        resp.setStatus(200);
        resp.getWriter().println("Done");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //
        doGet(req,resp);
    }
}

这是我的记录器信息

【问题讨论】:

  • 您正在将 cron 作业发送到特定的目标服务。您是否使用相同的配置文件部署了该目标服务?尝试删除&lt;target&gt;beta&lt;/target&gt;

标签: java google-app-engine cron google-cloud-platform


【解决方案1】:

我在这里的回答可能是相关的 - Google Cloud App Engine cron job - not calling the service

基本上,您的appengine-web.xml 中可能需要这个:

<service>beta</service>

您在cron.xml 中指定的&lt;target&gt; 必须与您在appengine-web.xml 中定义的&lt;service&gt; 匹配

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2016-07-14
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多