Program.cs 2.62 KB
using Hh.Mes.Common.log;
using Hh.Mes.Service.Repository;
using log4net;
using log4net.Config;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json.Linq;
using Quartz; 
using Quartz.Impl; 
using Quartz.Logging;
using System.Reflection;
using System.Reflection.Metadata;
using System.Security.Cryptography;

namespace Hh.Mes.Quartz
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region Log4Net
            Log4NetHelper.Instance.Repository = LogManager.CreateRepository("NETCoreRepository");
            XmlConfigurator.Configure(Log4NetHelper.Instance.Repository, new FileInfo(Path.GetDirectoryName(typeof(Program).Assembly.Location) + "/Config/log4net.config"));
            #endregion
             
            Console.WriteLine("开始启动---------------------------------------------");
            //1.创建调度单元
            Task<IScheduler> tsk = StdSchedulerFactory.GetDefaultScheduler();
            IScheduler scheduler = tsk.Result; 
            Log4NetHelper.Instance.Info("创建调度单元完成。");
            var configs = XmlHelper.GetXmlToList();
            foreach (var config in configs)
            {
                if (config.IsEnable != null && config.IsEnable.ToLower() == "1")
                {
                    //2.创建一个具体的作业即job(具体的job需要单独在一个文件中执行)
                    Type jobType = Type.GetType(config.ClassName);
                    if (jobType == null)
                    {
                        Console.WriteLine($"无法找到类 {config.ClassName},请检查配置。");
                        continue; 
                    }
                    IJobDetail job = JobBuilder.Create(jobType).WithIdentity(config.ServiceName).Build();
                    //3.创建并配置一个触发器trigger,
                    ITrigger _CtroTrigger = TriggerBuilder.Create()
                        .WithIdentity($"定时确认{config.ServiceName}")
                        .WithCronSchedule(config.Cron.ToString())
                        .Build()
                        as ITrigger;
                    //4.将job和trigger加入到作业调度池中
                    scheduler.ScheduleJob(job, _CtroTrigger);
                    Console.WriteLine($"已经将{config.ServiceName}的job和trigger加入到作业调度池中。");
                    Log4NetHelper.Instance.Info($"已经将{config.ServiceName}的job和trigger加入到作业调度池中。");
                }
            }   
            scheduler.Start();
            Console.ReadKey();
        }

    } 
}