크론 형태의 스케줄러 추가 (테스트 필요)
This commit is contained in:
parent
d2e5617198
commit
890faa7b6b
|
|
@ -21,6 +21,7 @@
|
||||||
<PackageReference Include="Npgsql" Version="8.0.2" />
|
<PackageReference Include="Npgsql" Version="8.0.2" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
|
||||||
<PackageReference Include="NRedisStack" Version="0.12.0" />
|
<PackageReference Include="NRedisStack" Version="0.12.0" />
|
||||||
|
<PackageReference Include="Quartz" Version="3.8.1" />
|
||||||
<PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.7" />
|
<PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.7" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
using Quartz;
|
||||||
|
using Quartz.Impl;
|
||||||
|
|
||||||
|
namespace Server.System
|
||||||
|
{
|
||||||
|
public abstract class Scheduler : IJob
|
||||||
|
{
|
||||||
|
|
||||||
|
private string _cron;
|
||||||
|
public string cron { get { return _cron; } }
|
||||||
|
|
||||||
|
public Scheduler(string cronData)
|
||||||
|
{
|
||||||
|
_cron = cronData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void Process();
|
||||||
|
public async Task Execute(IJobExecutionContext context)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Job 실행됨: " + DateTime.Now);
|
||||||
|
Process();
|
||||||
|
await Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class schedule
|
||||||
|
{
|
||||||
|
private IScheduler scheduler;
|
||||||
|
private List<Scheduler> schedules = new List<Scheduler>();
|
||||||
|
|
||||||
|
public void Add(Scheduler scheduler)
|
||||||
|
{
|
||||||
|
schedules.Add(scheduler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task Start()
|
||||||
|
{
|
||||||
|
// 스케줄러 생성
|
||||||
|
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
|
||||||
|
scheduler = await schedulerFactory.GetScheduler();
|
||||||
|
|
||||||
|
// 스케줄러 시작
|
||||||
|
await scheduler.Start();
|
||||||
|
|
||||||
|
// schedules에 있는 스케줄들을 스케줄러에 등록
|
||||||
|
foreach (var schedule in schedules)
|
||||||
|
{
|
||||||
|
IJobDetail job = JobBuilder.Create<Scheduler>()
|
||||||
|
.WithIdentity(schedule.GetType().Name, "group1") // Scheduler 클래스의 이름을 사용하여 고유한 ID 생성
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
ITrigger trigger = TriggerBuilder.Create()
|
||||||
|
.WithIdentity(schedule.GetType().Name + "Trigger", "group1")
|
||||||
|
.WithCronSchedule(schedule.cron) // 스케줄의 cron 표현식 사용
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
await scheduler.ScheduleJob(job, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 프로그램이 종료되지 않도록 대기
|
||||||
|
await Task.Delay(TimeSpan.FromDays(365));
|
||||||
|
}
|
||||||
|
public async Task Stop()
|
||||||
|
{
|
||||||
|
// 스케줄러 중지
|
||||||
|
await scheduler.Shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue