Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure-每周二安排一项工作_Clojure_Quartzite - Fatal编程技术网

Clojure-每周二安排一项工作

Clojure-每周二安排一项工作,clojure,quartzite,Clojure,Quartzite,我正在使用,我需要安排每周二早上(比如上午10点)的工作 我有这项工作的代码,但我不知道如何安排 我应该使用每日还是日历调度程序 我应该(如何)使用 编辑:这是我到目前为止所拥有的,但它不起作用(见评论) Edit2: 使用每日间隔计划每日间隔计划使其变得简单 如要定义明细表,请执行以下操作: “星期一至星期五,9日至17日” “每个周末凌晨3点” “每周五中午” “每天13:45” 每周四每小时,但不迟于15:00,总计不超过400次 我的案例与文档中突出显示的案例非常相似,但我找不到

我正在使用,我需要安排每周二早上(比如上午10点)的工作

我有这项工作的代码,但我不知道如何安排

  • 我应该使用
    每日
    还是
    日历
    调度程序

  • 我应该(如何)使用

编辑:这是我到目前为止所拥有的,但它不起作用(见评论)

Edit2

使用每日间隔计划每日间隔计划使其变得简单 如要定义明细表,请执行以下操作:

  • “星期一至星期五,9日至17日”
  • “每个周末凌晨3点”
  • “每周五中午”
  • “每天13:45”
  • 每周四每小时,但不迟于15:00,总计不超过400次

我的案例与文档中突出显示的案例非常相似,但我找不到如何处理每日日程安排。

一个可行的选择是使用cron触发器[1][2][3]。文档[1]中的示例代码-

(ns my.service
  (:require [clojurewerkz.quartzite.scheduler :as qs]
            [clojurewerkz.quartzite.triggers :as t]
            [clojurewerkz.quartzite.jobs :as j]
        [clojurewerkz.quartzite.jobs :refer [defjob]]
            [clojurewerkz.quartzite.schedule.cron :refer [schedule cron-schedule]]))

(defjob NoOpJob
  [ctx]
  (comment "Does nothing"))

(defn -main
  [& m]
  (let [s   (-> (qs/initialize) qs/start)
       job  (j/build
              (j/of-type NoOpJob)
              (j/with-identity (j/key "jobs.noop.1")))
        trigger (t/build
                  (t/with-identity (t/key "triggers.1"))
                  (t/start-now)
                  (t/with-schedule (schedule
                                     (cron-schedule "0 0 15 ? * 5"))))]
  (qs/schedule s job trigger)))
Cron调度使用调度它的机器的本地时区。类似于
010?*星期二
根据当地时间,描述了每周二上午10点。如果时间需要是某个特定的UTC时间,那么更好的选择是预先计算相应的本地时间,并在cron触发器描述中使用该时间。或者只是将机器配置为使用UTC时区

[1] -

[2] -[死亡]

[3] -


[4] -可能替代现在的2号死链接-

您是否尝试过cron触发器。一些
010?*星期二
应描述每周二上午10点。石英岩博士链接-@AmithGeorge我正在尝试。它看起来很管用。但是我不知道如何测试它,我得到了一个
Java.util.Date
实例,它似乎需要两个小时(我是GMT+2,也许这就是为什么?)。谢谢你的评论。@AmithGeorge也是,这可能是一个答案。正如我在之前的评论中所说,我还希望能够检查它是否有效。Cron在当地时间工作。调度作业的clojure代码将在执行作业的同一台机器上运行。只要该机器上的时间是周二上午10点,作业就会被触发。如果您需要它在UTC星期二上午10点运行,您可以选择让机器处于UTC时区,或手动计算适当的本地时间,即在安排时间之前星期二下午12点。。。我希望这能解释它,因为我还没有真正理解问题所在。@AmithGeorge如果你想把它作为一个答案,我会接受它。你介意展示一下如何在不使用cron语法的情况下做到这一点吗?我早就忘了2号链接应该指向什么,添加了第四个链接来解释cron触发器。
(ns my.service
  (:require [clojurewerkz.quartzite.scheduler :as qs]
            [clojurewerkz.quartzite.triggers :as t]
            [clojurewerkz.quartzite.jobs :as j]
        [clojurewerkz.quartzite.jobs :refer [defjob]]
            [clojurewerkz.quartzite.schedule.cron :refer [schedule cron-schedule]]))

(defjob NoOpJob
  [ctx]
  (comment "Does nothing"))

(defn -main
  [& m]
  (let [s   (-> (qs/initialize) qs/start)
       job  (j/build
              (j/of-type NoOpJob)
              (j/with-identity (j/key "jobs.noop.1")))
        trigger (t/build
                  (t/with-identity (t/key "triggers.1"))
                  (t/start-now)
                  (t/with-schedule (schedule
                                     (cron-schedule "0 0 15 ? * 5"))))]
  (qs/schedule s job trigger)))