【问题标题】:What else do I have to do other than making cron.xml?除了制作 cron.xml,我还需要做什么?
【发布时间】:2014-03-21 12:58:58
【问题描述】:

除了制作一个 cron.xml 文件用于调度之外,我还需要做什么?我得到了同样的例外:

java.security.AccessControlException: access denied 
("java.lang.RuntimePermission" "modifyThreadGroup")

正如我之前所说的那样。

这是我的 cron.xml

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
    <cron>
        <url>/tw</url>
        <description>Tweet every half an hour</description>
        <schedule>every 30 minutes from 8:00 to 17:00</schedule>
    </cron>
</cronentries>

/tw 是具有doGet 方法的servlet,该方法使用java.util.Timer 来安排任务。

【问题讨论】:

    标签: java google-app-engine timer cron scheduler


    【解决方案1】:

    您不能使用Timer(或任何其他通过普通Java API 使用线程的东西)。 AppEngine 不允许创建额外的线程作为请求的一部分,除非通过 its own special interface (并且它们不能超过请求)。

    crons 的要点是,每次它们应该发生时,它们已经被调用一次。您无需在 servlet 中进行任何进一步的“调度” - 只需在 cron 触发时执行您想要发生的事情。

    【讨论】:

      【解决方案2】:

      我认为你这样做有点错误。 Cron 用于指定调用 servlet 的时间间隔/时间。因此,您的实际 servlet 需要完成这项工作(即发送推文),而 cron 服务将确保在正确的时间调用它。

      【讨论】:

        【解决方案3】:

        您可以使用线程,但要遵守The Sandbox 中描述的限制。但是您可能根本不需要使用线程。使用Push Queue 安排工作。为了减少平台开销,AppEngine 过度配置可能会多次启动您的 cron 任务或排队任务,因此您的逻辑可能需要采取额外的预防措施以避免发送重复的推文。

        【讨论】:

          猜你喜欢
          • 2014-07-03
          • 2011-05-21
          • 1970-01-01
          • 1970-01-01
          • 2010-09-07
          • 2016-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多