Easily integrate .NET Core's Host with Quartz
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());
});
})
Licensed under the Apache License 2.0 license.