{"id":31663905,"url":"https://github.com/factorhouse/cronut-integrant","last_synced_at":"2026-01-06T04:09:26.579Z","repository":{"id":317626607,"uuid":"1068184050","full_name":"factorhouse/cronut-integrant","owner":"factorhouse","description":"Integrant Bindings for Cronut","archived":false,"fork":false,"pushed_at":"2025-10-02T03:00:11.000Z","size":23,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-02T03:31:26.289Z","etag":null,"topics":["clojure","integrant","quartz","quartz-scheduler","schedule","scheduler","task","task-scheduler"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/factorhouse.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-02T01:31:52.000Z","updated_at":"2025-10-02T03:02:22.000Z","dependencies_parsed_at":"2025-10-02T03:31:37.933Z","dependency_job_id":null,"html_url":"https://github.com/factorhouse/cronut-integrant","commit_stats":null,"previous_names":["factorhouse/cronut-integrant"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/factorhouse/cronut-integrant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factorhouse%2Fcronut-integrant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factorhouse%2Fcronut-integrant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factorhouse%2Fcronut-integrant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factorhouse%2Fcronut-integrant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/factorhouse","download_url":"https://codeload.github.com/factorhouse/cronut-integrant/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factorhouse%2Fcronut-integrant/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278846211,"owners_count":26056090,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","integrant","quartz","quartz-scheduler","schedule","scheduler","task","task-scheduler"],"created_at":"2025-10-07T20:51:42.897Z","updated_at":"2025-10-07T20:51:48.218Z","avatar_url":"https://github.com/factorhouse.png","language":"Clojure","readme":"# Cronut-Integrant: Integrant bindings for Cronut\n\n[![Cronut Integrant Test](https://github.com/factorhouse/cronut-integrant/actions/workflows/ci.yml/badge.svg)](https://github.com/factorhouse/cronut-integrant/actions/workflows/ci.yml)\n[![Clojars Project](https://img.shields.io/clojars/v/io.factorhouse/cronut-integrant.svg)](https://clojars.org/io.factorhouse/cronut-integrant)\n\n# Summary\n\nCronut-Integrant provides bindings for [Cronut](https://github.com/factorhouse/cronut)\nto [Integrant](https://github.com/weavejester/integrant), the DI micro-framework.\n\nCompatible with either [Cronut](https://github.com/factorhouse/cronut)\nor [Cronut-Javax](https://github.com/factorhouse/cronut-javax) depending on your requirement of Jakarta or Javax.\n\n## Related Projects\n\n| Project                                                     | Desription                                                                                                   | Clojars Project                                                                                                                         |\n|-------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| [cronut](https://github.com/factorhouse/cronut)             | Cronut with [Jakarta](https://en.wikipedia.org/wiki/Jakarta_EE) support (Primary)                            | [![Clojars Project](https://img.shields.io/clojars/v/io.factorhouse/cronut.svg)](https://clojars.org/io.factorhouse/cronut)             |\n| [cronut-javax](https://github.com/factorhouse/cronut-javax) | Cronut with [Javax](https://jakarta.ee/blogs/javax-jakartaee-namespace-ecosystem-progress/) support (Legacy) | [![Clojars Project](https://img.shields.io/clojars/v/io.factorhouse/cronut-javax.svg)](https://clojars.org/io.factorhouse/cronut-javax) |\n\n# Contents\n\n- [Configuration](#configuration)\n    * [`:cronut/scheduler` definition](#cronutscheduler-definition)\n        + [Scheduler example](#scheduler-example)\n    * [`:job` definition](#job-definition)\n        + [Job example](#job-example)\n    * [`:trigger` definition](#trigger-definition)\n        + [`:trigger` tagged literals](#trigger-tagged-literals)\n            - [`#cronut/cron`: Simple Cron Scheduling](#cronutcron-simple-cron-scheduling)\n            - [`#cronut/interval`: Simple Interval Scheduling](#cronutinterval-simple-interval-scheduling)\n            - [`#cronut/trigger`: Full trigger definition](#cronuttrigger-full-trigger-definition)\n    * [Concurrent execution](#concurrent-execution)\n        + [Global concurrent execution](#global-concurrent-execution)\n        + [Job-specific concurrent execution](#job-specific-concurrent-execution)\n        + [Misfire configuration](#misfire-configuration)\n- [System initialization](#system-initialization)\n- [Example system](#example-system)\n    * [Configuration](#configuration-1)\n    * [Job definitions](#job-definitions)\n    * [Helper functions](#helper-functions)\n    * [Putting it together](#putting-it-together)\n        + [Starting the system](#starting-the-system)\n        + [Logs of the running system](#logs-of-the-running-system)\n        + [Stopping the system](#stopping-the-system)\n- [License](#license)\n\n# Configuration\n\nA quartz `scheduler` runs a `job` on a schedule defined by a `trigger`.\n\nA `job` or `trigger` is uniquely identified by a `key` consisting of a `name` and (optional) `group`.\n\nA `job` can have multiple `triggers`, a `trigger` is for a single `job` only.\n\n## `:cronut/scheduler` definition\n\nCronut provides access to the Quartz Scheduler, exposed via Integrant with `:cronut/scheduler`\n\nThe scheduler supports the following fields:\n\n1. `:schedule`: `items` to schedule, each being a map containing a :job:, :opts, and :trigger\n2. `:concurrent-execution-disallowed?`: run all jobs with @DisableConcurrentExecution\n3. `:update-check?`: check for Quartz updates on system startup\n\n### Scheduler example\n\n````clojure\n :cronut/scheduler {:update-check?                    false\n                    :concurrent-execution-disallowed? true\n                    :schedule\n                    [;; basic interval\n                     {:job     #ig/ref :test.job/one\n                      :opts    {:description \"test job 1, identity auto-generated\"}\n                      :trigger #cronut/trigger {:type      :simple\n                                                :interval  2\n                                                :time-unit :seconds\n                                                :repeat    :forever}}\n\n                     ;; full interval\n                     {:job     #ig/ref :job/two\n                      :opts    #ig/ref :job/two-opts\n                      :trigger #cronut/trigger {:type        :simple\n                                                :interval    3000\n                                                :repeat      :forever\n                                                :name        \"trigger-two\"\n                                                :group       \"test-group\"\n                                                :description \"test trigger\"\n                                                :start       #inst \"2019-01-01T00:00:00.000-00:00\"\n                                                :end         #inst \"2019-02-01T00:00:00.000-00:00\"\n                                                :priority    5}}\n````\n\n## `:job` definition\n\nThe `:job` in every scheduled item must implement the org.quartz.Job interface\n\nThe expectation being that every 'job' in your Integrant system will reify that interface, either directly via `reify`\nor by returning a `defrecord` that implements the interface. e.g.\n\n````clojure\n(defmethod ig/init-key :test.job/one\n  [_ config]\n  (reify Job\n    (execute [this job-context]\n      (log/info \"Reified Impl:\" config))))\n\n(defrecord TestDefrecordJobImpl [identity description recover? durable? test-dep]\n  Job\n  (execute [this job-context]\n    (log/info \"Defrecord Impl:\" this)))\n\n(defmethod ig/init-key :test.job/two\n  [_ config]\n  (map-\u003eTestDefrecordJobImpl config))\n````\n\nCronut supports further Quartz configuration of jobs (identity, description, recovery, and durability) by configuring an\noptional `opts` map for each scheduled item.\n\n### Job integrant configuration\n\n**Job definition**\n\n````clojure\n(ns job\n  (:require [clojure.tools.logging :as log])\n  (:import (org.quartz Job)))\n\n(defrecord TestDefrecordJobImpl []\n  Job\n  (execute [this _job-context]\n    (log/info \"Defrecord Impl:\" this)))\n\n;; These two functions are called by Integrant on system startup, see:\n;; https://github.com/weavejester/integrant?tab=readme-ov-file#initializer-functions\n(defn two\n  [config]\n  (map-\u003eTestDefrecordJobImpl config))\n\n(def two-opts identity)\n````\n\n**Job options**\n\n````clojure\n:job/two          {}\n:job/two-opts     {:name        \"job2\"\n                   :group       \"group1\"\n                   :description \"test job 2, identity by name and group\"\n                   :recover?    true\n                   :durable?    false\n                   :dep-one     #ig/ref :dep/one\n                   :dep-two     #ig/ref :test.job/one}\n````                    \n\n## `:trigger` definition\n\nThe `:trigger` in every scheduled item must resolve to an org.quartz.Trigger of some variety or another, to ease that\nresolution Cronut provides the following tagged literals:\n\n### `:trigger` tagged literals\n\n#### `#cronut/cron`: Simple Cron Scheduling\n\nA job is scheduled to run on a cron by using the `#cronut/cron` tagged literal followed by a valid cron expression\n\nThe job will start immediately when the system is initialized, and runs in the default system time-zone\n\n````clojure\n:trigger #cronut/cron \"*/8 * * * * ?\"\n````\n\n#### `#cronut/interval`: Simple Interval Scheduling\n\nA job is scheduled to run periodically by using the `#cronut/interval` tagged literal followed by a milliseconds value\n\n````clojure\n:trigger #cronut/interval 3500\n````\n\n#### `#cronut/trigger`: Full trigger definition\n\nBoth `#cronut/cron` and `#cronut/interval` are effectively shortcuts to full trigger definition with sensible defaults.\n\nThe `#cronut/trigger` tagged literal supports the full set of Quartz configuration triggers:\n\n````clojure\n;; interval\n:trigger #cronut/trigger {:type        :simple\n                          :interval    3000\n                          :repeat      :forever\n                          :name        \"trigger-two\"\n                          :group       \"test-group\"\n                          :description \"sample simple trigger\"\n                          :start       #inst \"2019-01-01T00:00:00.000-00:00\"\n                          :end         #inst \"2019-02-01T00:00:00.000-00:00\"\n                          :misfire     :ignore\n                          :priority    5}\n\n;;cron\n:trigger #cronut/trigger {:type        :cron\n                          :cron        \"*/6 * * * * ?\"\n                          :name        \"trigger-five\"\n                          :group       \"test-group\"\n                          :description \"sample cron trigger\"\n                          :start       #inst \"2018-01-01T00:00:00.000-00:00\"\n                          :end         #inst \"2029-02-01T00:00:00.000-00:00\"\n                          :time-zone   \"Australia/Melbourne\"\n                          :misfire     :fire-and-proceed\n                          :priority    4}\n````\n\n## Concurrent execution\n\n### Global concurrent execution\n\nSet `:concurrent-execution-disallowed?` on the scheduler to disable concurrent execution of all jobs.\n\n### Job-specific concurrent execution\n\nSet `:disallow-concurrent-execution?` on a specific job to disable concurrent execution of that job only.\n\n### Misfire configuration\n\nIf you disable concurrent job execution ensure you understand Quartz Misfire options and remember to set\n`org.quartz.jobStore.misfireThreshold=[some ms value]` in your quartz.properties file. See Quartz documentation for more\ninformation.\n\nSee our test-resources/config.edn and test-resources/org/quartz/quartz.properties for examples of misfire threshold and\nbehaviour configuration.\n\n# System initialization\n\nWhen initializing an Integrant system you will need to provide the Cronut data readers.\n\nSee: `cronut/data-readers` for convenience.\n\n````clojure\n(def data-readers\n  {'cronut/trigger  cronut/trigger-builder\n   'cronut/cron     cronut/shortcut-cron\n   'cronut/interval cronut/shortcut-interval})\n````\n\ne.g.\n\n````clojure\n(defn init-system\n  \"Convenience for starting integrant systems with cronut data-readers\"\n  ([config]\n   (init-system config nil))\n  ([config readers]\n   (ig/init (ig/read-string {:readers (merge cronut/data-readers readers)} config))))\n````\n\n# Example system\n\nThis repository contains an example system composed of of integratant configuration, job definitions, and helper\nfunctions, see the [test](/test) directory.\n\n## Configuration\n\nIntegrant configuration source: [dev-resources/config.edn](dev-resources/config.edn).\n\n````clojure\n{:dep/one          {:a 1}\n\n :job/one          {:dep-one #ig/ref :dep/one}\n\n :job/two          {}\n :job/two-opts     {:name        \"job2\"\n                    :group       \"group1\"\n                    :description \"test job 2, identity by name and group\"\n                    :recover?    true\n                    :durable?    false\n                    :dep-one     #ig/ref :dep/one\n                    :dep-two     #ig/ref :job/one}\n\n :job/three        {}\n\n :cronut/scheduler {:update-check?                    false\n                    :concurrent-execution-disallowed? true\n                    :schedule                         [;; basic interval\n                                                       {:job     #ig/ref :job/one\n                                                        :opts    {:description \"test job 1, identity auto-generated\"}\n                                                        :trigger #cronut/trigger {:type      :simple\n                                                                                  :interval  2\n                                                                                  :time-unit :seconds\n                                                                                  :repeat    :forever}}\n\n                                                       ;; full interval\n                                                       {:job     #ig/ref :job/two\n                                                        :opts    #ig/ref :job/two-opts\n                                                        :trigger #cronut/trigger {:type        :simple\n                                                                                  :interval    3000\n                                                                                  :repeat      :forever\n                                                                                  :name        \"trigger-two\"\n                                                                                  :group       \"test-group\"\n                                                                                  :description \"test trigger\"\n                                                                                  :start       #inst \"2019-01-01T00:00:00.000-00:00\"\n                                                                                  :end         #inst \"2019-02-01T00:00:00.000-00:00\"\n                                                                                  :priority    5}}\n\n                                                       ;; shortcut interval\n                                                       {:job     #ig/ref :job/two\n                                                        :opts    #ig/ref :job/two-opts\n                                                        :trigger #cronut/interval 3500}\n\n                                                       ;; basic cron\n                                                       {:job     #ig/ref :job/two\n                                                        :opts    #ig/ref :job/two-opts\n                                                        :trigger #cronut/trigger {:type :cron\n                                                                                  :cron \"*/4 * * * * ?\"}}\n\n                                                       ;; full cron\n                                                       {:job     #ig/ref :job/two\n                                                        :opts    #ig/ref :job/two-opts\n                                                        :trigger #cronut/trigger {:type        :cron\n                                                                                  :cron        \"*/6 * * * * ?\"\n                                                                                  :name        \"trigger-five\"\n                                                                                  :group       \"test-group\"\n                                                                                  :description \"another-test trigger\"\n                                                                                  :start       #inst \"2018-01-01T00:00:00.000-00:00\"\n                                                                                  :end         #inst \"2029-02-01T00:00:00.000-00:00\"\n                                                                                  :time-zone   \"Australia/Melbourne\"\n                                                                                  :priority    4}}\n\n                                                       ;; shortcut cron\n                                                       {:job     #ig/ref :job/two\n                                                        :opts    #ig/ref :job/two-opts\n                                                        :trigger #cronut/cron \"*/8 * * * * ?\"}\n\n                                                       ;; Note: This job misfires because it takes 7 seconds to run, but runs every 5 seconds, and isn't allowed to run concurrently with {:disallowConcurrentExecution? true}\n                                                       ;;       So every second job fails to run, and is just ignored with the :do-nothing :misfire rule\n                                                       {:job     #ig/ref :job/three\n                                                        :opts    {:name        \"job3\"\n                                                                  :description \"test job 3, identity by name only - default group\"}\n                                                        :trigger #cronut/trigger {:type    :cron\n                                                                                  :cron    \"*/5 * * * * ?\"\n                                                                                  :misfire :do-nothing}}]}}\n````\n\n## Job definitions\n\nJob definitions source: [test/job.clj](test/job.clj)\n\n```clojure\n(ns job\n  (:require [clojure.core.async :as async]\n            [clojure.tools.logging :as log]\n            [integrant.core :as ig])\n  (:import (java.util UUID)\n           (org.quartz Job)))\n\n(defmethod ig/init-key :dep/one\n  [_ config]\n  config)\n\n(defmethod ig/init-key ::one\n  [_ config]\n  (reify Job\n    (execute [_this _job-context]\n      (log/info \"Reified Impl:\" config))))\n\n(defrecord TestDefrecordJobImpl []\n  Job\n  (execute [this _job-context]\n    (log/info \"Defrecord Impl:\" this)))\n\n;; These next two functions are called by Integrant on system startup, see:\n;; https://github.com/weavejester/integrant?tab=readme-ov-file#initializer-functions\n(defn two\n  [config]\n  (map-\u003eTestDefrecordJobImpl config))\n\n(def two-opts identity)\n\n(defmethod ig/init-key ::three\n  [_ config]\n  (reify Job\n    (execute [_this _job-context]\n      (let [rand-id (str (UUID/randomUUID))]\n        (log/info rand-id \"Reified Impl (Job Delay 7s):\" config)\n        (async/\u003c!! (async/timeout 7000))\n        (log/info rand-id \"Finished\")))))\n```\n\n## Helper functions\n\nHelper functions source: [test/cronut/integration-test.clj](test/cronut/integration_test.clj)\n\n````clojure\n(defn init-system\n  \"Example of starting integrant cronut systems with data-readers\"\n  ([]\n   (init-system (slurp (io/resource \"config.edn\"))))\n  ([config]\n   (init-system config nil))\n  ([config readers]\n   (ig/init (ig/read-string {:readers (merge cig/data-readers readers)} config))))\n\n(defn halt-system\n  \"Example of stopping integrant cronut systems\"\n  [system]\n  (ig/halt! system))\n````\n\n## Putting it together\n\n### Starting the system\n\n```clojure\n(do\n  (require '[cronut.integration-test :as test])\n  (test/init-system))\n```\n\n### Logs of the running system\n\n```bash\nConnecting to local nREPL server...\nClojure 1.12.3\nnREPL server started on port 54313 on host 127.0.0.1 - nrepl://127.0.0.1:54313\n(do\n  (require '[cronut.integration-test :as test])\n  (test/init-system))\n17:49:32.071 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – initializing scheduler\n17:49:32.072 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – with quartz update check disabled\n17:49:32.081 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.impl.StdSchedulerFactory – Using default implementation for ThreadExecutor\n17:49:32.085 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] o.quartz.core.SchedulerSignalerImpl – Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl\n17:49:32.085 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.core.QuartzScheduler – Quartz Scheduler v2.4.0 created.\n17:49:32.085 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.simpl.RAMJobStore – RAMJobStore initialized.\n17:49:32.085 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.core.QuartzScheduler – Scheduler meta-data: Quartz Scheduler (v2.4.0) 'CronutScheduler' with instanceId 'NON_CLUSTERED'\n  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.\n  NOT STARTED.\n  Currently in standby mode.\n  Number of jobs executed: 0\n  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 6 threads.\n  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.\n\n17:49:32.085 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.impl.StdSchedulerFactory – Quartz scheduler 'CronutScheduler' initialized from default resource file in Quartz package: 'quartz.properties'\n17:49:32.085 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.impl.StdSchedulerFactory – Quartz scheduler version: 2.4.0\n17:49:32.085 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – with global concurrent execution disallowed\n17:49:32.086 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.core.QuartzScheduler – JobFactory set to: cronut.job$factory$reify__2885@6b1b29a8\n17:49:32.086 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling [7] jobs\n17:49:32.088 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling new job DEFAULT.6da64b5bd2ee-bad9b344-eb35-48c2-a2e9-74a16dae0b7a {:description test job 1, identity auto-generated}\n17:49:32.089 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling new job group1.job2 {:name job2, :group group1, :description test job 2, identity by name and group, :recover? true, :durable? false, :dep-one {:a 1}, :dep-two #object[job$eval13079$fn$reify__13081 0x12d12097 job$eval13079$fn$reify__13081@12d12097]}\n17:49:32.089 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling new trigger for existing job group1.job2 {:name job2, :group group1, :description test job 2, identity by name and group, :recover? true, :durable? false, :dep-one {:a 1}, :dep-two #object[job$eval13079$fn$reify__13081 0x12d12097 job$eval13079$fn$reify__13081@12d12097]}\n17:49:32.090 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling new trigger for existing job group1.job2 {:name job2, :group group1, :description test job 2, identity by name and group, :recover? true, :durable? false, :dep-one {:a 1}, :dep-two #object[job$eval13079$fn$reify__13081 0x12d12097 job$eval13079$fn$reify__13081@12d12097]}\n17:49:32.090 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling new trigger for existing job group1.job2 {:name job2, :group group1, :description test job 2, identity by name and group, :recover? true, :durable? false, :dep-one {:a 1}, :dep-two #object[job$eval13079$fn$reify__13081 0x12d12097 job$eval13079$fn$reify__13081@12d12097]}\n17:49:32.091 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling new trigger for existing job group1.job2 {:name job2, :group group1, :description test job 2, identity by name and group, :recover? true, :durable? false, :dep-one {:a 1}, :dep-two #object[job$eval13079$fn$reify__13081 0x12d12097 job$eval13079$fn$reify__13081@12d12097]}\n17:49:32.091 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] cronut – scheduling new job DEFAULT.job3 {:name job3, :description test job 3, identity by name only - default group}\n17:49:32.091 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.core.QuartzScheduler – Scheduler CronutScheduler_$_NON_CLUSTERED started.\n=\u003e\n{:dep/one {:a 1},\n :job/one #object[job$eval13079$fn$reify__13081 0x12d12097 \"job$eval13079$fn$reify__13081@12d12097\"],\n :job/three #object[job$eval13106$fn$reify__13108 0x3ce9555 \"job$eval13106$fn$reify__13108@3ce9555\"],\n :job/two #job.TestDefrecordJobImpl{},\n :job/two-opts {:name \"job2\",\n                :group \"group1\",\n                :description \"test job 2, identity by name and group\",\n                :recover? true,\n                :durable? false,\n                :dep-one {:a 1},\n                :dep-two #object[job$eval13079$fn$reify__13081 0x12d12097 \"job$eval13079$fn$reify__13081@12d12097\"]},\n :cronut/scheduler #object[org.quartz.impl.StdScheduler 0x13778940 \"org.quartz.impl.StdScheduler@13778940\"]}\n17:49:32.094 INFO  [CronutScheduler_Worker-1] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:32.094 INFO  [CronutScheduler_Worker-2] job – Reified Impl: {:dep-one {:a 1}}\n17:49:32.096 INFO  [CronutScheduler_Worker-3] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:32.096 INFO  [CronutScheduler_Worker-4] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:32.097 INFO  [CronutScheduler_Worker-5] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:34.059 INFO  [CronutScheduler_Worker-6] job – Reified Impl: {:dep-one {:a 1}}\n17:49:35.006 INFO  [CronutScheduler_Worker-1] job – b41561ba-7aa9-407f-ae68-20c268dfbd33 Reified Impl (Job Delay 7s): {}\n17:49:35.569 INFO  [CronutScheduler_Worker-2] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:36.006 INFO  [CronutScheduler_Worker-3] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:36.007 INFO  [CronutScheduler_Worker-4] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:36.062 INFO  [CronutScheduler_Worker-5] job – Reified Impl: {:dep-one {:a 1}}\n17:49:38.063 INFO  [CronutScheduler_Worker-6] job – Reified Impl: {:dep-one {:a 1}}\n17:49:39.066 INFO  [CronutScheduler_Worker-2] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:40.006 INFO  [CronutScheduler_Worker-3] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:40.008 INFO  [CronutScheduler_Worker-4] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:40.062 INFO  [CronutScheduler_Worker-5] job – Reified Impl: {:dep-one {:a 1}}\n17:49:42.005 INFO  [CronutScheduler_Worker-6] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:42.013 INFO  [CronutScheduler_Worker-1] job – b41561ba-7aa9-407f-ae68-20c268dfbd33 Finished\n17:49:42.062 INFO  [CronutScheduler_Worker-2] job – Reified Impl: {:dep-one {:a 1}}\n17:49:42.569 INFO  [CronutScheduler_Worker-3] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:44.006 INFO  [CronutScheduler_Worker-4] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n17:49:44.063 INFO  [CronutScheduler_Worker-5] job – Reified Impl: {:dep-one {:a 1}}\n17:49:45.001 INFO  [CronutScheduler_Worker-6] job – a6805418-0a31-44f2-8c55-e686152f800f Reified Impl (Job Delay 7s): {}\n17:49:46.062 INFO  [CronutScheduler_Worker-1] job – Reified Impl: {:dep-one {:a 1}}\n17:49:46.062 INFO  [CronutScheduler_Worker-2] job – Defrecord Impl: #job.TestDefrecordJobImpl{}\n(test/halt-system *1)\n17:49:46.984 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.core.QuartzScheduler – Scheduler CronutScheduler_$_NON_CLUSTERED shutting down.\n17:49:46.984 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.core.QuartzScheduler – Scheduler CronutScheduler_$_NON_CLUSTERED paused.\n17:49:46.984 INFO  [nREPL-session-6fa69f5a-b19c-48cf-9b7f-20bda624be80] org.quartz.core.QuartzScheduler – Scheduler CronutScheduler_$_NON_CLUSTERED shutdown complete.\n=\u003e nil\n17:49:52.007 INFO  [CronutScheduler_Worker-6] job – a6805418-0a31-44f2-8c55-e686152f800f Finished\n```\n\n### Stopping the system\n\n```clojure\n(test/halt-system *1)\n```\n\n# License\n\nDistributed under the Apache 2.0 License.\n\nCopyright (c) [Factor House](https://factorhouse.io)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffactorhouse%2Fcronut-integrant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffactorhouse%2Fcronut-integrant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffactorhouse%2Fcronut-integrant/lists"}