106  
csharp
Поиск  
Always will be ready notify the world about expectations as easy as possible: job change page
Apr 29

Scheduling background jobs with Quartz.NET

Scheduling background jobs with Quartz.NET
Автор:
Источник:
Просмотров:
2906

Background tasks are crucial in many software applications, and scheduling them to run periodically or at specific times is a common requirement. In the .NET ecosystem, Quartz.NET provides a robust and flexible framework for scheduling such tasks. Let’s delve into what Quartz.NET is, why it is useful, and how we can effectively use it to schedule background jobs.

Introduction to Quartz.NET

Quartz.NET is a full-featured, open-source job scheduling system that can be integrated with, or used alongside, virtually any .NET application. It was ported from the popular Java library, Quartz, which has a long history in the Java community.

Quartz.NET allows developers to schedule jobs using a variety of methods, with jobs set to occur at specific times, intervals, or cron expressions. Additionally, Quartz.NET includes built-in support for job clustering and persistence.

Quartz.NET

Setting Up Quartz.NET

To use Quartz.NET, first install it via the NuGet package manager. In the package manager console, type:

Install-Package Quartz

Creating a Job

After installing Quartz.NET, the next step is to create a job. Jobs in Quartz.NET are simply classes that implement the IJob interface, which includes a single method, Execute.

Here’s an example of a simple job:

public class HelloWorldJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        Console.WriteLine("Hello, Quartz.NET!");
        return Task.CompletedTask;
    }
}

This job writes a greeting to the console.

Scheduling a Job

Scheduling a job in Quartz.NET involves a few steps. Here’s an example of how to schedule the HelloWorldJob to run every 5 seconds:

Scheduling a job in Quartz.NET involves a few steps. Here’s an example of how to schedule the HelloWorldJob to run every 5 seconds:

  • Create a StdSchedulerFactory and start it:

    ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
    IScheduler scheduler = await schedulerFactory.GetScheduler();
    await scheduler.Start();
     
  • Create a JobDetail instance:

    IJobDetail job = JobBuilder.Create<HelloWorldJob>()
                               .WithIdentity("HelloWorldJob", "Group1")
                               .Build();
     
  • Create a Trigger instance:

    ITrigger trigger = TriggerBuilder.Create()
                                     .WithIdentity("Trigger1", "Group1")
                                     .StartNow()
                                     .WithSimpleSchedule(x => x
                                         .WithIntervalInSeconds(5)
                                         .RepeatForever())
                                     .Build();
     
  • Schedule the job with the trigger:

    await scheduler.ScheduleJob(job, trigger);

Cron Schedules

While simple schedules are sufficient for many tasks, Quartz.NET also supports cron-like schedule expressions for complex schedules.

Here’s an example of a cron schedule that fires every weekday at 9:30 AM:

ITrigger trigger = TriggerBuilder.Create()
                                 .WithIdentity("Trigger2", "Group1")
                                 .WithCronSchedule("0 30 9 ? * MON-FRI")
                                 .Build();

Persisting Jobs

Quartz.NET allows jobs to be persisted, which means they survive application restarts. To configure a persisted job, you must configure Quartz.NET to use a job store. Here’s an example of how to use a JDBC job store:

NameValueCollection props = new NameValueCollection
{
    { "quartz.serializer.type", "binary" },
    { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX" },
    { "quartz.jobStore.dataSource", "default" },
    { "quartz.jobStore.tablePrefix", "QRTZ_" },
    { "quartz.dataSource.default.connectionString", "{YourConnectionString}" },
    { "quartz.dataSource.default.provider", "SqlServer" }
};

ISchedulerFactory schedulerFactory = new StdSchedulerFactory(props);

Remember to replace {YourConnectionString} with your actual database connection string.

Conclusion

Quartz.NET is a powerful, flexible, and feature-rich library for managing and scheduling background jobs in .NET applications. Whether you need to run simple recurring tasks or complex schedules that adhere to cron-like expressions, Quartz.NET has got you covered. It is a robust solution for enterprises with heavy job loads and it also caters to the needs of smaller applications. Moreover, with its ability to persist jobs, it ensures that your scheduled tasks survive application restarts, providing you with reliable and consistent performance. As a .NET developer, mastering Quartz.NET can prove to be a significant enhancement to your toolset. Happy coding!

Похожее
Dec 1, 2023
Author: Rico Fritzsche
The flight monitor case study: Applying Vertical Slices in a real-world scenario In my last articles I talked about Vertical Slice Architecture and how to organize code in a non-technical way. I showed some simple examples of how to do...
Jul 19
Author: Anton Skuratovich
Microsoft has recently introduced .NET Aspire, an opinionated stack for building resilient, observable, and configurable cloud-native applications with .NET 8+. Delivered through a collection of NuGet packages, .NET Aspire addresses specific cloud-native concerns, catering to the intricacies of modern, cloud-centric...
Jul 25, 2023
Unleashing the Power of Meta-Programming: A Comprehensive Guide to C# Reflection Reflection, put simply, is a mechanism provided by the .NET framework that allows a running program to examine and manipulate itself. It’s like a coding mirror that gives your...
Dec 21, 2023
Author: Jeremy Wells
Introduction and prerequisites This post is part of an ongoing series where we build a “walking skeleton” application using ASP.NET Core and Angular as well as other technologies for deployment and testing. By now, our application is a minimally functional...
Написать сообщение
Тип
Почта
Имя
*Сообщение
RSS
Если вам понравился этот сайт и вы хотите меня поддержать, вы можете
Soft skills: 18 самых важных навыков, которыми должен владеть каждый работник
Стили именования переменных и функций. Используйте их все
10 историй, как «валят» айтишников на технических интервью
Функции и хранимые процедуры в PostgreSQL: зачем нужны и как применять в реальных примерах
Семь итераций наивности или как я полтора года свою дебютную игру писал
Вопросы с собеседований, которые означают не то, что вы думаете
Путеводитель по репликации баз данных
5 приемов увеличения продуктивности разработчика
Топ 8 лучших ресурсов для практики программирования в 2018
Использование SQLite в .NET приложениях
LinkedIn: Sergey Drozdov
Boosty
Donate to support the project
GitHub account
GitHub profile