I'm trying to save my triggers and jobs on Database. I think, i set everything okay but I doesn't save data on database.
Here is my quartz service registration
service.AddQuartz(opt =>
{
opt.UsePersistentStore(p =>
{
p.UseMySql(configuration.GetConnectionString("defaultForQuartz")!);
p.UseClustering();
p.UseProperties = true;
p.UseNewtonsoftJsonSerializer();
});
});
service.AddQuartzHostedService(opt =>
{
opt.WaitForJobsToComplete = true;
});
service.AddScoped<IScheduler>(_ => new StdSchedulerFactory().GetScheduler().Result);
service.AddTransient<ExpireUrlJob>();
Here is consumer's consume method which schedules jobs:
public async Task Consume(ConsumeContext<ExpiredUrlDto> context)
{
var message = context.Message;
var job = JobBuilder.Create<ExpireUrlJob>()
.UsingJobData("url", message.LongUrl)
.Build();
logger.LogInformation($"{nameof(ExpireUrlJob)} created for {message.LongUrl}");
var offset = new DateTimeOffset(message.ExpireDateTime.ToUniversalTime());
logger.LogInformation($"offset is {offset} for trigger");
var trigger = TriggerBuilder.Create()
.ForJob(job)
.StartAt(offset)
.Build();
logger.LogInformation($"trigger created for {message.LongUrl}");
await scheduler.ScheduleJob(job, trigger);
logger.LogInformation("trigger and job was scheduled");
await scheduler.Start();
logger.LogInformation("scheduler started");
}
Also my job execute method is:
public Task Execute(IJobExecutionContext context)
{
var dataMap = context.JobDetail.JobDataMap;
var url = dataMap.GetString("url");
var entity = appDbContext.Urls.FirstOrDefault(p => p.LongUrl == url);
if (entity == null)
{
return Task.CompletedTask;
}
entity.ShortPath = null;
entity.ExpireDate = null;
appDbContext.SaveChanges();
return Task.CompletedTask;
}
Also i have following packages in my project
- MassTransit
- MassTransit.RabbitMQ
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.Configuration.Binder
- MySql.Data
- Newtonsoft.Json
- Npgsql.EntityFrameworkCore.PostgreSQL
- Quartz
- Quartz.AspNetCore
- Quartz.Extensions.DependencyInjection
- Quartz.Extensions.Hosting
- Quartz.Serialization.Json