Ijob中的Exetuce方法没有被触发。
类库代码:
public static async void Start()
{
try
{
using (var dbContext = new SqlDbContext())
{
ISchedulerFactory schedContext = new StdSchedulerFactory();
var scheduler = schedContext.GetScheduler();
if (!scheduler.Result.IsStarted)
{
await scheduler.Result.Start();
}
Console.WriteLine("job1 trigger job bağlama");
//IJobDetail job = JobBuilder.Create<Job>().WithIdentity(jobItem.JOB_KEY, "group1").Build();
IJobDetail job = JobBuilder.Create<JobExecuteService>().WithIdentity("JobExecuteService", "MailGrup").Build();
//ITrigger trigger = TriggerBuilder.Create()
// .WithSchedule(CronScheduleBuilder
// .DailyAtHourAndMinute(jobItem.JOB_TIME.Hours, jobItem.JOB_TIME.Minutes)
// .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Turkey Standard Time"))
// )
// .WithDescription(jobItem.DESCRIPTION)
// .Build();
//ISimpleTrigger TriggerGorev = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("JobExecuteService").StartAt(DateTime.UtcNow).WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()).Build();
// var example = TriggerBuilder.Create()
//.WithIdentity("JobExecuteService", "MailGrup")
//.ForJob("JobExecuteService", "MailGrup")
//.WithSimpleSchedule(o =>
//{
// o.WithRepeatCount(5)
// .WithInterval(TimeSpan.FromMinutes(1));
//})
//.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10,25))
.ForJob(job)
.Build();
await scheduler.Result.ScheduleJob(job, trigger);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public class JobExecuteService: IJob
{
private readonly IPublisherService _publisherService;
private IConfiguration Configuration { get; }
public JobExecuteService(IPublisherService PublisherService, IConfiguration configuration)
{
_publisherService = PublisherService;
Configuration = configuration;
}
public async Task Execute(IJobExecutionContext context)
{
try
{
Task taskA = new Task(() => Console.WriteLine("Hello from task at {0}", DateTime.Now.ToString()));
taskA.Start();
await Console.Out.WriteLineAsync("HelloJob is executing.");
}
catch (Exception ex)
{
throw new ArgumentNullException(nameof(context));
}
//return Task.FromResult(result);
}
}
我尝试了各种方法。我尝试了一千件事。但事实并非如此。注释行中的方法是我一直尝试过的方法。Quartz 方法是在库中定义的。 Quartz升降部分定义在mvc项目的program.cs文件中。以上代码定义在library项目中。 下面的代码在mvc项目中。通过引用相互链接。
mvc代码程序.cs:
builder.Services.AddQuartz(q =>
{
// Joblarımı oluşturduğum servisi başlatıyorum
JobSchedulerService.Start();
q.UseMicrosoftDependencyInjectionJobFactory();
});
// ASP.NET Core hosting
builder.Services.AddQuartzServer(options =>
{
// when shutting down we want jobs to complete gracefully
options.WaitForJobsToComplete = true;
});
更新:我从头开始打开一个项目,并在单个项目中使用相同的代码进行尝试。它发生了。所以问题是因为我在不同的项目中进行配置。我想在类库项目中使用我的石英代码。但我的主要项目是mvc项目。我该如何配置?
更新2:它不起作用,因为我在JobExecuteService类中创建了一个构造函数。当我不创建构造函数时它会起作用。但我需要创建构造函数。我怎样才能克服这个问题?
好吧,我直接在执行方法上使用configurationBuilder解决了这个问题:
IConfiguration _configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
IDsService _services = new DsService(_configuration);