{"id":13604507,"url":"https://github.com/JezhikLaas/quartznet-RavenJobStore","last_synced_at":"2025-04-12T02:30:47.878Z","repository":{"id":206149557,"uuid":"715965633","full_name":"JezhikLaas/quartznet-RavenJobStore","owner":"JezhikLaas","description":null,"archived":false,"fork":false,"pushed_at":"2023-12-18T14:39:04.000Z","size":440,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-12-19T10:55:58.824Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","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/JezhikLaas.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2023-11-08T07:40:27.000Z","updated_at":"2023-12-20T15:34:38.855Z","dependencies_parsed_at":"2023-12-20T15:44:58.269Z","dependency_job_id":null,"html_url":"https://github.com/JezhikLaas/quartznet-RavenJobStore","commit_stats":null,"previous_names":["jezhiklaas/quartznet-ravenjobstore"],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JezhikLaas%2Fquartznet-RavenJobStore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JezhikLaas%2Fquartznet-RavenJobStore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JezhikLaas%2Fquartznet-RavenJobStore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JezhikLaas%2Fquartznet-RavenJobStore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JezhikLaas","download_url":"https://codeload.github.com/JezhikLaas/quartznet-RavenJobStore/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248506901,"owners_count":21115503,"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-08-01T19:00:46.965Z","updated_at":"2025-04-12T02:30:47.452Z","avatar_url":"https://github.com/JezhikLaas.png","language":"C#","funding_links":[],"categories":["Libraries and Frameworks"],"sub_categories":[],"readme":"[![build and test](https://github.com/JezhikLaas/quartznet-RavenJobStore/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/JezhikLaas/quartznet-RavenJobStore/actions/workflows/build-and-test.yml)\n\n[![Qodana](https://github.com/JezhikLaas/quartznet-RavenJobStore/actions/workflows/code_quality.yml/badge.svg)](https://github.com/JezhikLaas/quartznet-RavenJobStore/actions/workflows/code_quality.yml)\n\n\n# Quartz.NET-RavenJobStore\nJobStore implementation for Quartz.NET scheduler using RavenDB.\u003cbr\u003e\nNot exactly a fork of, but inspired by [Quartz.NET-RavenDB](https://github.com/ravendb/quartznet-RavenDB)\n\n## About\n\n[Quartz.NET](https://github.com/quartznet/quartznet) is a full-featured, open source job scheduling system that can be used from smallest apps to large scale enterprise systems.\n\n[Quartz.NET on RavenDB](https://github.com/JezhikLaas/quartznet-RavenJobStore) is a provider written for Quartz.NET which lets us use the [RavenDB](https://ravendb.net/features) NoSQL database as the persistent Job Store for scheduling data (instead of the SQL solutions that are built-in Quartz.NET).\n\n## Project goals\n* Can handle high volumes of jobs and triggers.\n* Suitable for clustered schedulers.\n* Different schedulers (instance names) can share the same database.\n\n## How to get started\nFirst add scheduling to your app using Quartz.NET ([example](http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html)).\nThen install the NuGet [package](https://www.nuget.org/packages/Domla.Quartz.RavenJobStore/).\n\nYou can either let the package create a IDocumentStore on its own:\n\n```csharp\n\nusing Domla.Quartz.Raven;\nusing Quartz;\nusing Quartz.Impl.RavenStore.Example;\nusing Raven.Client.Documents;\nusing Raven.Client.Documents.Conventions;\n\nCreateFromProperties().Run();\n\nIHost CreateFromProperties() =\u003e\n    Host.CreateDefaultBuilder(args)\n        .ConfigureServices(services =\u003e\n        {\n            services.AddHostedService\u003cWorker\u003e();\n\n            services.AddQuartz(quartz =\u003e\n            {\n                // Quartz insists on selecting a serializer. \n                quartz.SetProperty(\"quartz.serializer.type\", \"binary\");\n\n                // Configure thread pool size for Quartz,\n                // not directly to RavenJobStore.\n                quartz.UseDefaultThreadPool(pool =\u003e pool.MaxConcurrency = 10);\n\n                quartz.UsePersistentStore(store =\u003e\n                {\n                    // Tell Quartz to use RavenJobStore as store backend,\n                    // creating a DocumentStore along the way.\n                    store.UseRavenDb(configuration =\u003e\n                    {\n                        // To run this demo you need to have running RavenDB at http://localhost:8080.\n                        // Or use a different URL which suits your needs.\n                        configuration.Urls = new[] { \"http://localhost:8080\" };\n\n                        // The database is expected to be created.\n                        configuration.Database = \"QuartzDemo\";\n\n                        // Time to wait for non-stale query results.\n                        configuration.SecondsToWaitForIndexing = 15; // default\n\n                        // How often to retry an operation when failed because of a concurrency exception.\n                        configuration.ConcurrencyErrorRetries = 100; // default\n\n                        // Just for the record - you can prefix the collection \n                        // names for our classes with a common name.\n                        // configuration.CollectionName = \"Name\";\n\n                        // Path to a raven client certificate\n                        // configuration.CertPath = \"certificate.pem\";\n\n                        // Password for the certificate.\n                        // configuration.CertPass = \"secret-password\";\n                    });\n                });\n            });\n            services.AddQuartzHostedService(quartz =\u003e quartz.WaitForJobsToComplete = true);\n        })\n        .Build();\n\n```\n\nor you can create and configure your own IDocumentStore and let the JobStore use it:\n\n```csharp\n\nusing Domla.Quartz.Raven;\nusing Quartz;\nusing Quartz.Impl.RavenStore.Example;\nusing Raven.Client.Documents;\nusing Raven.Client.Documents.Conventions;\n\nCreateWithOwnDocumentStore().Run();\n\nIHost CreateWithOwnDocumentStore() =\u003e\n    Host.CreateDefaultBuilder(args)\n        .ConfigureServices(services =\u003e\n        {\n            // Build and register a Raven document store as usual.\n            var conventions = new DocumentConventions\n            {\n                UseOptimisticConcurrency = true\n            };\n            var documentStore = new DocumentStore\n            {\n                Conventions = conventions,\n                // To run this demo you need to have running RavenDB at http://localhost:8080.\n                // Or use a different URL which suits your needs.\n                Urls = new[] { \"http://localhost:8080\" },\n                    \n                // The database is expected to be created.\n                Database = \"QuartzDemo\"\n            };\n\n            documentStore.Initialize();\n\n            services.AddSingleton\u003cIDocumentStore\u003e(documentStore);\n\n            services.AddHostedService\u003cWorker\u003e();\n\n            services.AddQuartz(quartz =\u003e\n            {\n                // Quartz insists on selecting a serializer. \n                quartz.SetProperty(\"quartz.serializer.type\", \"binary\");\n\n                // Configure thread pool size for Quartz,\n                // not directly to RavenJobStore.\n                quartz.UseDefaultThreadPool(pool =\u003e pool.MaxConcurrency = 10);\n\n                // Yes, it is that simple.\n                quartz.UsePersistentStore(store =\u003e store.UseRavenDb(services));\n            });\n\n            services.AddQuartzHostedService(quartz =\u003e quartz.WaitForJobsToComplete = true);\n        })\n        .Build()\n        .UseRavenJobStoreLogging();\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJezhikLaas%2Fquartznet-RavenJobStore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJezhikLaas%2Fquartznet-RavenJobStore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJezhikLaas%2Fquartznet-RavenJobStore/lists"}