admin管理员组文章数量:1025795
I am creating my jobs from a database table and adding a simple Schedule Listener.
// Create, configure and start the scheduler.
this.scheduler = await this.schedulerFactory.GetScheduler(cancellationToken);
this.scheduler.JobFactory = this.jobFactory;
this.scheduler.ListenerManager.AddSchedulerListener(this.schedulerListener);
await this.scheduler.Start(cancellationToken).ConfigureAwait(false);
// Schedule each the persistent jobs.
foreach (var jobSchedule in this.dataModel.JobSchedules)
{
try
{
// Create the job.
var job = jobSchedule.Job;
var type = Type.GetType(job.Type);
ArgumentNullException.ThrowIfNull(type);
var jobDetail = JobBuilder.Create(type)
.WithIdentity(new JobKey(job.Name, job.Group))
.Build();
// Create the trigger.
var trigger = jobSchedule.Trigger;
var quartzTriggerBuilder = TriggerBuilder
.Create()
.WithIdentity(new TriggerKey(trigger.Name, trigger.Group));
// Add the CRON scheduler.
if (trigger.CronSchedule != null)
{
if (trigger.TimeZone == null)
{
quartzTriggerBuilder.WithCronSchedule(trigger.CronSchedule);
}
else
{
quartzTriggerBuilder
.WithCronSchedule(
trigger.CronSchedule,
x => x.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(trigger.TimeZone)));
}
}
var quartzTrigger = quartzTriggerBuilder.Build();
// Schedule the job.
await this.scheduler.ScheduleJob(jobDetail, quartzTrigger, cancellationToken).ConfigureAwait(false);
}
catch (Exception exception)
{
this.logger.LogError(exception, "{message}", exception.Message);
}
}
The listener implementation is simply:
public async Task JobDeleted(JobKey jobKey, CancellationToken cancellationToken = default)
{
this.logger.LogError("{message}", $"Deleting job ({jobKey.Group},{jobKey.Name})");
}
This fires twice for every job I have running. I've verified that there is only one job running by putting logging statements on the jobs.
Why does it fire twice?
I am creating my jobs from a database table and adding a simple Schedule Listener.
// Create, configure and start the scheduler.
this.scheduler = await this.schedulerFactory.GetScheduler(cancellationToken);
this.scheduler.JobFactory = this.jobFactory;
this.scheduler.ListenerManager.AddSchedulerListener(this.schedulerListener);
await this.scheduler.Start(cancellationToken).ConfigureAwait(false);
// Schedule each the persistent jobs.
foreach (var jobSchedule in this.dataModel.JobSchedules)
{
try
{
// Create the job.
var job = jobSchedule.Job;
var type = Type.GetType(job.Type);
ArgumentNullException.ThrowIfNull(type);
var jobDetail = JobBuilder.Create(type)
.WithIdentity(new JobKey(job.Name, job.Group))
.Build();
// Create the trigger.
var trigger = jobSchedule.Trigger;
var quartzTriggerBuilder = TriggerBuilder
.Create()
.WithIdentity(new TriggerKey(trigger.Name, trigger.Group));
// Add the CRON scheduler.
if (trigger.CronSchedule != null)
{
if (trigger.TimeZone == null)
{
quartzTriggerBuilder.WithCronSchedule(trigger.CronSchedule);
}
else
{
quartzTriggerBuilder
.WithCronSchedule(
trigger.CronSchedule,
x => x.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(trigger.TimeZone)));
}
}
var quartzTrigger = quartzTriggerBuilder.Build();
// Schedule the job.
await this.scheduler.ScheduleJob(jobDetail, quartzTrigger, cancellationToken).ConfigureAwait(false);
}
catch (Exception exception)
{
this.logger.LogError(exception, "{message}", exception.Message);
}
}
The listener implementation is simply:
public async Task JobDeleted(JobKey jobKey, CancellationToken cancellationToken = default)
{
this.logger.LogError("{message}", $"Deleting job ({jobKey.Group},{jobKey.Name})");
}
This fires twice for every job I have running. I've verified that there is only one job running by putting logging statements on the jobs.
Why does it fire twice?
本文标签: quartz schedulerWhy does ISchedulerLIstenerJobDeleted fire twice for each jobStack Overflow
版权声明:本文标题:quartz scheduler - Why does ISchedulerLIstener.JobDeleted fire twice for each job? - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745640256a2160702.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论