Quartz 및 Cron 트리거를 사용하여 .NET 8에서 작업 자동화
개발자라면 이메일 보내기, 보고서 생성, 일정에 따른 데이터 정리 등 자동화하고 싶은 작업이 있을 것입니다.
그렇다면 어떻게 그렇게 할 수 있나요?
바로 그곳이다 서비스 들어오세요. 자동화를 효율적이고 안정적으로 처리할 수 있는 좋은 방법입니다.
서비스를 사용하여 이를 설정하는 방법을 분석해 보겠습니다.
소개
Quartz는 일정 관리 및 자동화를 위한 인기 있는 오픈 소스 도구입니다.
그 중심에는 석영 트리거두 가지 모두에서 사용할 수 있는 강력한 작업 예약 라이브러리인 Quartz Scheduler의 핵심 구성 요소입니다. 기음# 그리고 자바.
공식 문서: [
What is a trigger?
A Trigger defines when and how often a job should run. \n Think of it as the schedule attached to a job.
When you schedule a job in Quartz, you provide:
- A Job (what to do)
- A Trigger (when to do it)
Types of Quartz Triggers
- Simple Trigger
- Runs a job a specific number of times or at fixed intervals.
- Example: run every 10 seconds, repeat 5 times.
\
- Cron Trigger
- Uses a Cron expression (like in Unix/Linux Cronjobs) for more complex schedules.
- Example: run every day at 2:00 AM.
What is a Cron expression?
A Cron Expression is a string with 6 or 7 fields that defines a schedule, specifying exactly when a job should run (down to seconds). \n It’s like a compact language for time-based scheduling.
Detailed expression: you can read it in their official documents.
The requirement is to read the file every 30 seconds.
Let’s implement a Cron trigger in .NET 8.
Project Settings
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>CronImplementation</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Quartz" Version="3.15.1" />
<PackageReference Include="Quartz.Plugins" Version="3.15.1" />
</ItemGroup>
<ItemGroup>
<Content Include="jobs.xml" CopyToOutputDirectory="Always" />
</ItemGroup>
</Project>
Program
using Quartz;
using Quartz.Impl;
using Quartz.Xml;
using Quartz.Simpl; // <-- needed for SimpleTypeLoadHelper
namespace CronImplementation
{
class Program
{
static async Task Main(string[] args) { //스케줄러 생성 ISchedulerFactory Factory = new StdSchedulerFactory(); IScheduler 스케줄러 = 공장을 기다리고 있습니다.GetScheduler(); //형식 로드 도우미 생성(새 API에 필요) var typeLoadHelper = new SimpleTypeLoadHelper(); typeLoadHelper.Initialize(); //새 XMLSchedulingDataProcessor 생성자 사용 var xmlProcessor = new XMLSchedulingDataProcessor(typeLoadHelper); //파일 경로가 절대 문자열인지 확인 xmlPath = Path.Combine(AppContext.BaseDirectory, "jobs.xml"); xmlProcessor.ProcessFileAndScheduleJobs(xmlPath, 스케줄러); Console.WriteLine(File.Exists(xmlPath)); //스케줄러 시작 wait Scheduler.Start(); Console.WriteLine("XML 구성을 사용하여 석영 스케줄러가 시작되었습니다. 중지하려면 아무 키나 누르십시오..."); Console.ReadKey(); 스케줄러를 기다립니다.Shutdown(); Console.WriteLine("스케줄러가 중지되었습니다."); } } }
파일 읽기 작업
using Quartz;
namespace CronImplementation
{
public class FileReadingJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
string filePath = Path.Combine(AppContext.BaseDirectory, "file.txt");
if (!File.Exists(filePath))
{
Console.WriteLine($"File not found: {filePath}");
return Task.CompletedTask;
}
//Read all lines
string[] lines = File.ReadAllLines(filePath);
foreach (var line in lines)
{
Console.WriteLine(line);
}
Console.WriteLine($"FileReadingJob executed at: {DateTime.Now}");
return Task.CompletedTask;
}
}
}
Jobs.xml
<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="
xmlns:xsi="
version="2.0">
<!-- List of scheduled jobs -->
<schedule>
<!-- Job definition -->
<job>
<name>FileReadingJob</name>
<group>group1</group>
<description>Job that reads content from file</description>
<job-type>CronImplementation.FileReadingJob, CronImplementation</job-type>
<!-- Namespace.ClassName, Assembly -->
<durable>true</durable>
<recover>false</recover>
</job>
<!-- Trigger definition (Cron-based) -->
<trigger>
<cron>
<name>FileReadingJobTrigger</name>
<group>group1</group>
<job-name>FileReadingJob</job-name>
<job-group>group1</job-group>
<cron-expression>0/10 * * * * ?</cron-expression>
<!-- Runs every 10 seconds -->
</cron>
</trigger>
</schedule>
</job-scheduling-data>
파일.txt
“이것은 콘솔 앱입니다. 이 프로젝트는 NET 8의 Cron 트리거 구현을 설명합니다.”
산출

요약
Quartz 트리거는 플랫폼 독립적입니다. 즉, Windows 및 Linux 서버 모두에 문제 없이 앱을 배포할 수 있습니다.
또 다른 뛰어난 기능은 여러 작업에 서로 다른 트리거 일정을 할당할 수 있어 작업 실행 방법에 더 많은 유연성을 제공한다는 것입니다.
코드를 변경할 필요 없이 XML 파일을 간단히 편집하여 트리거를 업데이트하거나 삭제할 수도 있습니다. 변경 사항을 적용하려면 서비스를 다시 시작해야 한다는 점을 명심하세요.
\



Post Comment