.NET FX使用Quartz

运行环境:

  Framework4.5.1、Quartz2.6.2.0、windows服务

创建windows服务的过程按下不表,以前多使用hangfire来做定时任务,与Sql Server搭配着来,配合的很好。现在新项目要用oracle,浪不起来了,改用Quartz.NET

1.配置环境

配置log4net的配置文件路径

1  XmlConfigurator.Configure(new FileInfo(System.AppDomain.CurrentDomain.BaseDirectory+@"\log4net.config"));
2                 System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
View Code

2.创建接口

接口主要用于服务启动时,识别job。

1 interface IBpmJob
2     {
3         void Regist(IScheduler scheduler);
4     }

3.在具体的job中,实现接口

在Regist中实现注册job的逻辑。我将job统一放到了某个文件夹下面。

 1 public sealed class ExceptionFeeJob : IJob, IBpmJob
 2     {
 3 
 4         public void Execute(IJobExecutionContext context)
 5         {
 6             
 7         }
 8 
 9         public void Regist(IScheduler scheduler)
10         {
11             try
12             {
13                 var cronExceptionFeeJob = ConfigurationManager.AppSettings["Cron_ExceptionFeeJob"];
14                 var trigger = TriggerBuilder.Create()
15                                 .WithCronSchedule(cronExceptionFeeJob)
16                                 .Build();
17                 IJobDetail job = JobBuilder.Create<ExceptionFeeJob>()
18                 .WithIdentity("ExceptionFeeJob")
19                 .Build();
20                 scheduler.ScheduleJob(job, trigger);
21             }
22             catch (Exception ex)
23             {
24             }
25 
26         }
27 }

4.注册job

在服务启动时,扫描存job所在的命名空间QuartzService.Jobs,如果这个job实现了接口则调用接口的注册函数。这样的话,只需要关注开发job就可以,服务启动时会自动注册相关的job

 1 var schedulerFactory = new StdSchedulerFactory();
 2             var scheduler = schedulerFactory.GetScheduler();
 3             scheduler.Start();
 4             var assembly = Assembly.Load(typeof(MainService).Assembly.GetName().Name);
 5             var assemblyTypes = assembly.GetTypes().Where(i=>i.Namespace.Equals("QuartzService.Jobs")).ToList();
 6             foreach (var item in assemblyTypes)
 7             {
 8                 var obj = assembly.CreateInstance(item.FullName) as IBpmJob;
 9                 if (obj != null) {
10                     obj.Regist(scheduler);
11                 }
12             }

 

posted @ 2021-02-03 13:36  烟台西炮台  阅读(85)  评论(0编辑  收藏  举报