{"id":19839347,"url":"https://github.com/redislabs/redis-quartz","last_synced_at":"2025-06-29T07:37:21.215Z","repository":{"id":14024043,"uuid":"16726003","full_name":"RedisLabs/redis-quartz","owner":"RedisLabs","description":"A Quartz Scheduler JobStore that uses Redis for persistent storage.","archived":false,"fork":false,"pushed_at":"2023-05-26T14:16:16.000Z","size":39,"stargazers_count":147,"open_issues_count":8,"forks_count":63,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-06-16T13:04:55.688Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RedisLabs.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2014-02-11T09:35:01.000Z","updated_at":"2025-06-15T09:08:36.000Z","dependencies_parsed_at":"2024-11-12T12:33:09.741Z","dependency_job_id":null,"html_url":"https://github.com/RedisLabs/redis-quartz","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RedisLabs/redis-quartz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedisLabs%2Fredis-quartz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedisLabs%2Fredis-quartz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedisLabs%2Fredis-quartz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedisLabs%2Fredis-quartz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RedisLabs","download_url":"https://codeload.github.com/RedisLabs/redis-quartz/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedisLabs%2Fredis-quartz/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262558394,"owners_count":23328522,"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","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":[],"created_at":"2024-11-12T12:21:55.937Z","updated_at":"2025-06-29T07:37:21.192Z","avatar_url":"https://github.com/RedisLabs.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RedisJobStore\n\nA [Quartz Scheduler](http://quartz-scheduler.org/) JobStore that uses [Redis](http://redis.io/) for persistent storage.\n\n## Configuration\n\nTo get [Quartz](http://quartz-scheduler.org/) up and running quickly with `RedisJobStore`, use the following example to configure your `quartz.properties` file:\n\n    # setting the scheduler's misfire threshold, in milliseconds\n    org.quartz.jobStore.misfireThreshold: 60000\n\n    # setting the scheduler's JobStore to RedisJobStore\n    org.quartz.jobStore.class: com.redislabs.quartz.RedisJobStore\n\n    # setting your redis host\n    org.quartz.jobStore.host: \u003cyour_redis_host\u003e\n\n    # setting your redis port\n    org.quartz.jobStore.port: \u003cyour_redis_port\u003e\n\n    # setting your redis password (optional)\n    org.quartz.jobStore.password: \u003cyour_redis_password\u003e\n\n    # setting a 'releaseTriggersInterval' will trigger a mechanism for releasing triggers of non-alive schedulers in a given interval, in milliseconds\n    org.quartz.jobStore.releaseTriggersInterval: 600000\n\n    # setting a 'instanceIdFilePath' will release triggers of previous schedulers on startup\n    org.quartz.jobStore.instanceIdFilePath: /etc/quartz\n\n\n## External Libraries\n\n`RedisJobStore` uses the [jedis](https://github.com/xetorthio/jedis), [gson](https://code.google.com/p/google-gson/) and [jedis-lock](https://github.com/abelaska/jedis-lock) libraries, so you'll have to download them and add them to your project's classpath or define the relevant Maven dependencies:\n\n    \u003cdependency\u003e\n\t\t\u003cgroupId\u003eredis.clients\u003c/groupId\u003e\n\t\t\u003cartifactId\u003ejedis\u003c/artifactId\u003e\n\t\t\u003cversion\u003e2.0.0\u003c/version\u003e\n\t\u003c/dependency\u003e\n\n    \u003cdependency\u003e\n     \t\u003cgroupId\u003ecom.google.code.gson\u003c/groupId\u003e\n     \t\u003cartifactId\u003egson\u003c/artifactId\u003e\n     \t\u003cversion\u003e2.2.4\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecom.github.jedis-lock\u003c/groupId\u003e\n      \u003cartifactId\u003ejedis-lock\u003c/artifactId\u003e\n      \u003cversion\u003e1.0.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\n## Limitations\n\n`RedisJobStore` attempts to be fully compliant with all of [Quartz](http://quartz-scheduler.org/)'s features, but currently has some limitations that you should be aware of:\n\n* Only `SimpleTrigger` and `CronTrigger`are supported.\n* For any `GroupMatcher`, only a `StringOperatorName.EQUALS` operator is supported. You should note that if your scheduler is designed to compare any group of jobs, triggers, etc. with a pattern-based matcher.\n* `RedisJobStore` is designed to use multiple schedulers, but it is not making any use of the `org.quartz.scheduler.instanceName`. The only limitation here is that you should maintain the uniquness of your trigger_group_name:trigger_name, and your job_group_name:job_name and you'll be good to go with multiple schedulers.\n* A `Scheduler` should be started once on a machine, also to ensure releasing locked triggers of previously crashed schedulers.\n* Data atomicity- `RedisJobStore` is not using any transaction-like mechanism, but ensures synchronization with global lockings. As a result, if a connection issue occurs during an operation, it might be partially completed.\n* `JobDataMap` values are stored and returned as Strings, so you should implement your jobs accordingly.\n* `RedisJobStore` is firing triggers only by their fire time, without any cosideration to their priorities at all.\n\n## Known Issues\n\n1. Quartz's standard JobStores are sometimes considering triggers without a next fire time as tirggers in a WAITING state. As `RedisJobStore` is using redis [Sorted Sets](http://redis.io/topics/data-types#sorted-sets) to maintain triggers states, using their next fire time as the score, it will consider these triggers as stateless.\n\n## Redis Schema\n\nTo better understand the workflow and the behavior of a [Quartz Scheduler](http://quartz-scheduler.org/) using a `RedisJobStore`, you may want to review the [redis](http://redis.io/) schema in which the `RedisJobStore` is making a use of at: [/schema/schema.txt](/schema/schema.txt)\n\n## License\n\n[The MIT License](http://opensource.org/licenses/MIT)\n\n[![githalytics.com alpha](https://cruel-carlota.pagodabox.com/e08b202aefce41667b99d181284b1f6e \"githalytics.com\")](http://githalytics.com/RedisLabs/redis-quartz)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredislabs%2Fredis-quartz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredislabs%2Fredis-quartz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredislabs%2Fredis-quartz/lists"}