|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Collections.Specialized;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
|
|
|
|
using Quartz;
|
|
|
|
|
using Quartz.Core;
|
|
|
|
|
using Quartz.Impl;
|
|
|
|
|
|
|
|
|
|
namespace TopshelfStudy.NetCoreDemo
|
|
|
|
|
{
|
|
|
|
|
public static class QuartzNetExtensions
|
|
|
|
|
{
|
|
|
|
|
public static IServiceCollection AddCustomQuartz(this IServiceCollection services)
|
|
|
|
|
{
|
|
|
|
|
var config = services.BuildServiceProvider().GetRequiredService<Microsoft.Extensions.Configuration.IConfiguration>();
|
|
|
|
|
|
|
|
|
|
//配置
|
|
|
|
|
var option = new NameValueCollection
|
|
|
|
|
{
|
|
|
|
|
//实例名
|
|
|
|
|
["quartz.scheduler.instanceName"] = "MissionQuartzScheduler",
|
|
|
|
|
//线程数
|
|
|
|
|
["quartz.threadPool.threadCount"] = "10",
|
|
|
|
|
//线程超时
|
|
|
|
|
["quartz.jobStore.misfireThreshold"] = "60000",
|
|
|
|
|
//Job数据可以使用序列化数据,而非只能使用字符串
|
|
|
|
|
["quartz.serializer.type"] = "json",
|
|
|
|
|
|
|
|
|
|
//配置以使用作业StoreTx
|
|
|
|
|
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
|
|
|
|
|
//将 AdoJobStore 配置为使用驱动程序委托
|
|
|
|
|
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz",
|
|
|
|
|
//使用表前缀配置 AdoJobStore
|
|
|
|
|
["quartz.jobStore.tablePrefix"] = "QRTZ_",
|
|
|
|
|
//使用“要使用的数据源名称”配置 AdoJobStore
|
|
|
|
|
["quartz.jobStore.dataSource"] = "quarztDS",
|
|
|
|
|
//设置数据源的连接字符串
|
|
|
|
|
["quartz.dataSource.quarztDS.connectionString"] = config.GetConnectionString("SolutionConnection"),
|
|
|
|
|
//设置数据库提供程序
|
|
|
|
|
["quartz.dataSource.quarztDS.provider"] = "MySql",
|
|
|
|
|
//将 AdoJobStore 配置为将字符串用作作业数据映射值(建议)
|
|
|
|
|
["quartz.jobStore.useProperties"] = "false",
|
|
|
|
|
|
|
|
|
|
// 负载均衡
|
|
|
|
|
["quartz.jobStore.clustered"] = "true",
|
|
|
|
|
["quartz.scheduler.instanceId"] = "AUTO",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//使用quartz.config配置文件
|
|
|
|
|
var factory = new StdSchedulerFactory();
|
|
|
|
|
|
|
|
|
|
//或者:使用程序配置项
|
|
|
|
|
//var factory = new StdSchedulerFactory(option);
|
|
|
|
|
var scheduler = factory.GetScheduler().Result;
|
|
|
|
|
|
|
|
|
|
services.AddSingleton<ISchedulerFactory>(factory);
|
|
|
|
|
services.AddSingleton<IScheduler>(scheduler);
|
|
|
|
|
|
|
|
|
|
services.AddSingleton<CustomSchedulerListener>();
|
|
|
|
|
services.AddSingleton<CustomJobListener>();
|
|
|
|
|
services.AddSingleton<CustomTriggerListener>();
|
|
|
|
|
|
|
|
|
|
return services;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|