繁体   English   中英

从Cron Job App Engine调用终结点类-Java

[英]Invoke endpoint class from Cron Job App Engine - Java

在我的App Engine应用程序中,我想从cron服务更新datstore实体,该服务将使用端点方法调用来更新数据。 但是,无论何时执行cron job ,它都会返回HTTP 405 status code 我没弄错我要去哪里。 如果有人对此有任何想法,请帮助我解决这个问题。 谢谢

cron.xml

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
    <cron>
        <url>/cron/gaevalidatecronjob</url>
        <description>Cron Job that autoreset validity of poster.</description>
        <schedule>every day 00:00</schedule>
        <timezone>Asia/Kolkata</timezone>
    </cron>
</cronentries>

web.xml中

    <servlet>
            <servlet-name>ValidityCheckerCron</servlet-name>
            <servlet-class>com.jobaka.dekhbhai.ValidityCheckerCron</servlet-class>
   </servlet>
    <servlet-mapping>
            <servlet-name>ValidityCheckerCron</servlet-name>
            <url-pattern>/cron/gaevalidatecronjob</url-pattern>
    </servlet-mapping>

@SuppressWarnings("serial")
public class ValidityCheckerCron extends HttpServlet {

    private static final Logger _logger = Logger
            .getLogger(ValidityCheckerCron.class.getSimpleName());

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

        super.doGet(req, resp);

        try {

            _logger.log(Level.INFO, "Cron Job has been executed");

            PosterMasterEndpoint endpoint = new PosterMasterEndpoint();
            CollectionResponse<PosterMaster> response = endpoint
                    .getStarRatedPoster(null, null, null);

            if (response != null && response.getItems() != null
                    && response.getItems().size() > 0) {

                Collection<PosterMaster> collResult = response.getItems();
                ArrayList<PosterMaster> lstResult = new ArrayList<PosterMaster>(
                        collResult);
                Date today = new Date();

                for (PosterMaster posterMaster : lstResult) {

                    Date validityDate = posterMaster.getValidityDate();
                    Calendar c = Calendar.getInstance();
                    c.setTime(validityDate);
                    c.add(Calendar.DATE, posterMaster.getValidity());
                    validityDate = c.getTime();

                    if (validityDate.getTime() < today.getTime()) {

                        posterMaster.setValidity(0);
                        posterMaster.setStarRated(false);
                        endpoint.updatePosterMaster(posterMaster);

                    }

                    _logger.log(Level.INFO, "Cron Job has been executed for = "
                            + posterMaster.getPosterUrl());
                }

            }

        } catch (Exception ex) {
            _logger.log(Level.INFO, "Problem in ValidityCheckerCron");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
        doGet(req, resp);
    }
}

删除super.doGet应该可以解决此问题。 Servlet方法的默认实现是返回方法不允许错误(405)。

根据文章Cron for Java的计划任务

呼叫Google Cloud端点

您无法通过cron作业调用Google Cloud Endpoint。 相反,您应该向由应用程序的配置文件或调度文件中指定的处理程序服务的目标发出请求。 然后,该处理程序将调用适当的终结点类和方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM