参照アドレス
クォーツ紹介
Quartzは、ジョブ、トリガー、スケジューラーの3つの部分で構成されています
。
- 定期的に実行する必要のあるジョブ
2.トリガー- トリガーするときは、cron式を使用することをお勧めします。オンラインでcron式を生成します:http : //cron.qqe2.com/
3.スケジューラー- ジョブとトリガーをスケジューラーにロードして実行する
1.NugetはQuartzをインストールします
2.宿題の使用
ジョブを作成するには3つの方法があり
ます。1.ジョブクラスを作成し、IJobインターフェイスを実装します。
ジョブクラスを作成する
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync("Greetings from HelloJob!");
}
}
見積もり
//引用作业类
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1") //分组,暂时不知道有什么用
.Build();
2.時限ジョブを動的に追加する既存のメソッドに適した参照クラス。//すべてijobインターフェースを実装する必要があります
Type type = Type.GetType("test1.TestCase");//获取类 ""里为 命名空间.类名
Object obj = Activator.CreateInstance(type);//这里创建
//4.创建一个作业
IJobDetail job2 = JobBuilder.Create(obj.GetType())
.WithIdentity("demojob1", "groupa")
.Build();
3.物理DLLを参照します。//すべてijobインターフェースを実装する必要があります
//适合在不改变代码的情况下,动态添加要定时执行的方法(前面是文件物理地址(可以使用映射将虚拟地址转换成物理地址) ,后面是命名空间加类名)
object obj = Assembly.LoadFile(@"D:\普通文件袋\测试\ClassLibrary2\bin\Debug\ClassLibrary2.dll").CreateInstance("ClassLibrary2.Class2");
//4.创建一个作业
IJobDetail job2 = JobBuilder.Create(obj.GetType())
.WithIdentity("demojob1", "groupa")
.Build();
3.トリガーの使用
1.指定された時間にトリガーして、
オンラインでcron式を生成します:http : //cron.qqe2.com/
/// <summary>
/// 周一到周五,每天早晨8点30
/// </summary>
/// <returns></returns>
public static ITrigger DayMorningRun()
{
string corn = "0 30 8 0 0 1/5 *";
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger_DayMorningRun", "group_DayMorningRun")
.WithCronSchedule(corn)
.Build();
return trigger;
}
2.トリガーは複数のジョブを転送できます
string corn = "3/5 * * * * ? *";
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("demotrigger1", "groupa")
.WithCronSchedule(corn)//从第三秒开始,每5秒执行一次
.ForJob(job) //触发器绑定多个作业
.ForJob(job) //触发器绑定多个作业
.Build();
4.スケジューラの使用
公式の例
https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html
private static async Task RunProgramRunExample()
{
try
{
//1.首先创建一个作业调度池
ISchedulerFactory schedf = new StdSchedulerFactory();
//2.实例化调度器工厂
ISchedulerFactory schedulefactory = new StdSchedulerFactory();
//3.实例化调度器
IScheduler scheduler = await schedulefactory.GetScheduler();
// 开始执行调度
await scheduler.Start();
//将作业以及触发器放入调度器
await scheduler.ScheduleJob(job, trigger);
//也可以放入触发器
//await scheduler.ScheduleJob(trigger);
// some sleep to show what's happening
//await Task.Delay(TimeSpan.FromSeconds(10)); //程序10秒后执行下一步
//await scheduler.Shutdown(); //结束调度
}
catch (SchedulerException se)
{
Console.WriteLine(se);
}
}
5.完全な例
class Program
{
private static void Main(string[] args)
{
RunProgramRunExample().GetAwaiter().GetResult();
Console.WriteLine("Press any key to close the application");
Console.ReadKey();
}
private static async Task RunProgramRunExample()
{
try
{
//1.首先创建一个作业调度池
ISchedulerFactory schedf = new StdSchedulerFactory();
//2.实例化调度器工厂
ISchedulerFactory schedulefactory = new StdSchedulerFactory();
//3.实例化调度器
IScheduler scheduler = await schedulefactory.GetScheduler();
await scheduler.Start();
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
//5.2推荐:第二种使用cron表达式
//在线生成cron表达式: http://cron.qqe2.com/
string corn = "3/5 * * * * ? *";
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("demotrigger1", "groupa")
.WithCronSchedule(corn)//从第三秒开始,每5秒执行一次
.ForJob(job)
.ForJob(job)
.Build();
await scheduler.ScheduleJob(job, trigger);
}
catch (SchedulerException se)
{
Console.WriteLine(se);
}
}
}
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync("Greetings from HelloJob!");
}
}
6. MVC拡張
MVCは、CronJobsスケジュール済みジョブ、CronTriggersトリガー、CronSchedulersスケジューラー
// todoの3つのカテゴリーで構成されます。スケジュールされたジョブにトリガーを直接配置できます。次に、後で最適化し
ます。最後に、Global.asaxのApplication_Startに登録する必要があります。
CronJobs
public class CronJobs
{
public class Job : IJob
{
public async Task Execute(IJobExecutionContext context)
{
Task task1 = Task.Run(() =>
{
//执行定时作业
});
//或者这边也行
}
}
}
Trigger、CronTriggers
public class CronTriggers
{
//在线生成cron表达式: http://cron.qqe2.com/
/// <summary>
/// 周一到周五,每天早晨8点30
/// </summary>
/// <returns></returns>
public static ITrigger DayMorningRun()
{
string corn = "0 30 8 0 0 1/5 *";
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger_DayMorningRun", "group_DayMorningRun")
.WithCronSchedule(corn)
.Build();
return trigger;
}
}
スケジューラcronSchedulers
public class CronSchedulers
{
public static void Start()
{
Task task = Task.Run(async () => {
await StartAsync();
});
}
public static async Task StartAsync()
{
try
{
//1.首先创建一个作业调度池
ISchedulerFactory schedf = new StdSchedulerFactory();
//2.实例化调度器工厂
ISchedulerFactory schedulefactory = new StdSchedulerFactory();
//3.实例化调度器
IScheduler scheduler = await schedulefactory.GetScheduler();
await scheduler.Start();
IJobDetail job1 = JobBuilder.Create<CronJobs.DayMorningRunJobs>()
.Build();
ITrigger trigger1 = CronTriggers.DayMorningRun();
//单个触发器只能触发单个作业,单个作业可以多个触发器触发
await scheduler.ScheduleJob(job1, trigger1);
}
catch (SchedulerException se)
{
LogHelper.WriteLog("调度报错", se);//log4Net日志
}
}
}
Global.asaxのApplication_Startに登録する
//定时调度
CronSchedulers.Start();