Skip to content

skiptirengu/Hosting.Extensions.Quartz

Repository files navigation

Hosting.Extensions.Quartz

Build status

Easily integrate .NET Core's Host with Quartz

Usage

Check out the working example.

To enable the Quartz integration, simply call one of the three UseQuartz() extension methods on your HostBuilder.

new HostBuilder().UseQuartz((context, provider, scheduler) =>
{
    // You can further configure the scheduler instance here, like 
    // add job listeners, trigger listeners, etc.
    // DO NOT call the Start method here as it will be automatically
    // invoked by the hosted service once it has started.
    scheduler.ListenerManager.AddJobListener(
      new JobChainingJobListener("TestListener"), KeyMatcher<JobKey>.KeyEquals(new JobKey("DummyJob"))
    );
})

To change Quartz options, add a section to your appsettings.json file, or use the UserQuartz() method.

{
  "Quartz": {
    "quartz.threadPool.type": "Quartz.Simpl.SimpleThreadPool, Quartz",
    "quartz.threadPool.threadCount": 5,
    "quartz.threadPool.threadPriority": "Normal",
    "quartz.jobStore.type": "Quartz.Simpl.RAMJobStore, Quartz",
    "quartz.jobStore.misfireThreshold": 6000
  }
}

or

new HostBuilder().UseQuartz((context, config) =>
{
    config.Set("quartz.threadPool.threadCount", "2");
})

To schedule a new job, call the extension method AddJobService() on a IServiceCollection instance.

new HostBuilder().ConfigureServices((services) =>
{
    services.AddJobService<DummyJob>((job, trigger) =>
    {
        job.WithIdentity("job1").WithDescription("Simple job");
        trigger.StartNow().WithSimpleSchedule((x) => x.WithIntervalInSeconds(5).RepeatForever());
    });
    services.AddJobService<IMyJobInterface, MyJob>((job, trigger) =>
    {
        job.WithIdentity("job2").WithDescription("Simple job");
        trigger.StartNow().WithSimpleSchedule((x) => x.WithIntervalInSeconds(60).RepeatForever());
    });
})

License

Licensed under the Apache License 2.0 license.