public QuartzSchedulingServer( ILoggerFactory loggerFactory, IServiceScopeFactory scopeFactory, ShellContext shellContext, IOptions <SchedulingOptions> schedulingOptions) { Guard.ArgumentNotNull(scopeFactory, nameof(scopeFactory)); Guard.ArgumentNotNull(shellContext, nameof(shellContext)); Guard.ArgumentNotNull(schedulingOptions, nameof(schedulingOptions)); Guard.ArgumentNotNull(scopeFactory, nameof(scopeFactory)); var schedulerFactory = new Quartz.Impl.StdSchedulerFactory(); _scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); _schedulingOptions = schedulingOptions; _loggerFactory = loggerFactory; var jobTypes = shellContext.Blueprint.Dependencies .Where(d => typeof(IScheduledJob).GetTypeInfo().IsAssignableFrom(d.Type)) .Select(d => d.Type) .Distinct().ToArray(); _jobTypes = jobTypes.ToDictionary(t => { var jobAttribute = t.GetAttribute <ConfiguredJobAttribute>(); return((jobAttribute != null) ? jobAttribute.JobId : Guid.NewGuid().ToString("N")); }, t => t); }
protected override void OnStart(string[] args) { Logger.Info("服务开始启动"); #region job配置 NameValueCollection properties = new NameValueCollection(); // 远程输出配置 properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz"; properties["quartz.scheduler.exporter.port"] = "666"; properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler"; properties["quartz.scheduler.exporter.channelType"] = "tcp"; properties["quartz.scheduler.instanceName"] = "DataCenterInstance"; // set thread pool info properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.threadPool.threadCount"] = "2";//单个任务所对应的线程,为1表示只有一个线程工作,这样避免多个线程改同一条数据 properties["quartz.threadPool.threadPriority"] = "Normal"; // job initialization plugin handles our xml reading, without it defaults are used properties["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz"; properties["quartz.plugin.xml.fileNames"] = System.AppDomain.CurrentDomain.BaseDirectory + "quartz_jobs.xml"; ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(properties); scheduler = sf.GetScheduler(); scheduler.Start(); #endregion }
private void ScheduleJobs() { // construct a scheduler factory ISchedulerFactory schedFact = new Quartz.Impl.StdSchedulerFactory(); // get a scheduler IScheduler sched = schedFact.GetScheduler(); sched.Start(); // define the job and tie it to our HelloJob class IJobDetail job = JobBuilder.Create <Jobs.PreventIdleJob>() .WithIdentity("preventIdle", "preventIdleGroup") .Build(); // Trigger the job to run now, and then every 2 mins ITrigger trigger = TriggerBuilder.Create() .WithIdentity("triggerPreventIdle", "preventIdleGroup") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInMinutes(2) .RepeatForever()) .Build(); sched.ScheduleJob(job, trigger); }
// starts the scheduler, defines the jobs and the triggers public static async Task Start(IServiceProvider container) { var schedulerFactory = new Quartz.Impl.StdSchedulerFactory(); var _scheduler = schedulerFactory.GetScheduler().Result; _scheduler.JobFactory = new JobFactory(container); await _scheduler.Start(); var yourJob = JobBuilder.Create <YourJob>() .Build(); var yourJobTrigger = TriggerBuilder.Create() .StartNow() .WithSimpleSchedule(s => s .WithIntervalInMinutes(2) .RepeatForever()) .Build(); await _scheduler.ScheduleJob(yourJob, yourJobTrigger); //reward var rewardJob = JobBuilder.Create <RewardJob>() .Build(); var rewardJobTrigger = TriggerBuilder.Create() .StartNow() .WithSimpleSchedule(s => s .WithIntervalInHours(24) .RepeatForever()) .Build(); await _scheduler.ScheduleJob(rewardJob, rewardJobTrigger); }
static IScheduler CreateScheduler(IComponentContext context) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); var scheduler = TaskUtil.Await(() => schedulerFactory.GetScheduler()); return(scheduler); }
static IScheduler CreateScheduler(IComponentContext context) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); var scheduler = schedulerFactory.GetScheduler(); return scheduler; }
static IScheduler CreateScheduler(IComponentContext context) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); var scheduler = schedulerFactory.GetScheduler(); return(scheduler); }
void Application_Start(object sender, EventArgs e) { //---------------------------初始化quartz--------------------------- Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(); sched = sf.GetScheduler(); sched.Start(); //------------------------------------------------------------------ Logger.Info("web启动成功"); }
public TaskHandler() { _Logger = Common.Logging.LogManager.GetLogger(GetType()); //依据配置文件获取需要调度任务 var fact = new Quartz.Impl.StdSchedulerFactory(); _Scheduler = fact.GetScheduler(); //在此注册任务处理模块时间处理 JobBaseHandler.OnExecute += JobBaseHandler_OnExecute; }
protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(); sched = sf.GetScheduler(); string MyGroupName = "PlatformJobGroup"; string TrigGroupName = "PlatformTrigerGroup"; //CommonFun.Instance.AddSchedule<JobSchedule>(ref sched, "DoImport", TrigGroupName, MyGroupName); CommonFun.Instance.AddSchedule <PayStatusNotifyJob>(ref sched, "DoImport", TrigGroupName, MyGroupName); sched.Start(); }
static async Task MainAsync() { var factory = new Quartz.Impl.StdSchedulerFactory(); factory.Initialize(); var scheduler = await factory.GetScheduler(); // Create some jobs //var ceo_hpyJob = // JobBuilder.Create<hpyJob>() // .Build(); //var ceo_mtJob = // JobBuilder.Create<mtJob>() // .Build(); var ceo_bitJob = JobBuilder.Create <bitJob>() .Build(); // var ceo_eosJob = //JobBuilder.Create<eosJob>() //.Build(); // var ceo_oiocJob = //JobBuilder.Create<oiocJob>() //.Build(); //var ceo_eacJob = // JobBuilder.Create<eacJob>() // .Build(); // Schedule them to run //await scheduler.ScheduleJob(ceo_mtJob, CreateTrigger()); await scheduler.ScheduleJob(ceo_bitJob, CreateTrigger()); //await scheduler.ScheduleJob(ceo_oiocJob, CreateTrigger()); //await scheduler.ScheduleJob(ceo_hpyJob, CreateTrigger()); await scheduler.Start(); Console.WriteLine("Scheduler started, press any key to quit"); Console.ReadKey(); // Stop running all jobs await scheduler.Shutdown(); }
protected override void OnStart(string[] args) { var f = new Quartz.Impl.StdSchedulerFactory(); scheduler = f.GetScheduler(); var job = JobBuilder.Create <jj>().Build(); var trigger = TriggerBuilder.Create().WithIdentity("daily") .ForJob(job) .WithSimpleSchedule(a => a.WithIntervalInSeconds(10)) //.WithDailyTimeIntervalSchedule(a=>{ a.StartingDailyAt(new TimeOfDay(0, 0)).WithIntervalInMinutes(1).WithRepeatCount(5); }) .Build(); scheduler.ScheduleJob(trigger); }
public void Initialize() { var schedulerFactory = new Quartz.Impl.StdSchedulerFactory(); _schedular = schedulerFactory.GetScheduler(); IJobDetail job = JobBuilder.Create <SendMailTaskTest>() .WithIdentity("SendMailJob") .Build(); // 建立觸發器 ITrigger trigger = TriggerBuilder.Create() .WithCronSchedule("0 0/1 * * * ?") // 每一分鐘觸發一次。 .WithIdentity("SendMailTrigger") .Build(); // 把工作加入排程 _schedular.ScheduleJob(job, trigger); // 啟動排程器 _schedular.Start(); }
public void StartScheduler() { Quartz.Impl.StdSchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory(); Quartz.IScheduler scheduler = factory.GetScheduler(); string myJobName = "MyFirstJob"; string myGroupName = "MyGroup"; string[] jobNames = scheduler.GetJobNames(myGroupName); if (!jobNames.Contains(myJobName)) { Quartz.JobDetail job = new Quartz.JobDetail(myJobName, myGroupName, typeof(ConsoleJob1)); job.JobDataMap.Add("ExtraText", "Plinko"); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(2); trigger.Name = "myFirstTrigger"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("HelloWorld1")) { Quartz.JobDetail job = new Quartz.JobDetail("HelloWorld1", myGroupName, typeof(Quartz.Job.NoOpJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(15); trigger.Name = "HelloWorld1Trigger"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("HelloWorld2")) { Quartz.Impl.Calendar.HolidayCalendar calendar = new Quartz.Impl.Calendar.HolidayCalendar(); calendar.AddExcludedDate(DateTime.Now.ToUniversalTime()); calendar.AddExcludedDate(DateTime.Now.AddDays(4).ToUniversalTime()); scheduler.AddCalendar("randomHolidays", calendar, true, true); Quartz.JobDetail job = new Quartz.JobDetail("HelloWorld2", myGroupName, typeof(Quartz.Job.NoOpJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(15, 00); trigger.Name = "HelloWorld2Trigger"; trigger.Group = myGroupName; trigger.CalendarName = "randomHolidays"; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("TimeTrackerReminder")) { Quartz.JobDetail job = new Quartz.JobDetail("TimeTrackerReminder", myGroupName, typeof(Quartz.Job.NoOpJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeWeeklyTrigger(DayOfWeek.Monday, 8, 0); trigger.Name = "EveryMondayAtEight"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("UnscheduledJob")) { Quartz.JobDetail job = new Quartz.JobDetail("UnscheduledJob", myGroupName, typeof(Quartz.Job.NoOpJob)); scheduler.AddJob(job, true); } if (!jobNames.Contains("TwoAliens")) { Quartz.JobDetail job = new Quartz.JobDetail("TwoAliens", myGroupName, typeof(TwoAlienJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMonthlyTrigger(28, 23, 59); trigger.Name = "EveryFullMoon"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } scheduler.Start(); }
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //資料回覆為Json格式 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); //Quartz Log與Nlog綁定 Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info }; NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger(); _logger.Log(NLog.LogLevel.Info, "C10Mvc Application_Start()"); //建立以Ram為儲存體的排程器 ISchedulerFactory schedulerFactory = new Quartz.Impl.StdSchedulerFactory(); IScheduler _Scheduler = schedulerFactory.GetScheduler(); //WithCronSchedule:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontriggers.html //==更新個股基本資料 // 建立工作 IJobDetail jobStockInfo = JobBuilder.Create <StockInfoTask>() .WithIdentity("jobStockInfo") .Build(); // 建立觸發器 ITrigger triggerStockInfo = TriggerBuilder.Create() .WithCronSchedule("0 10 3 * * ?") // 每天0310 .WithIdentity("triggerStockInfo") .Build(); //==取得三大法人資料 // 建立工作 IJobDetail jobStockThreeTrade = JobBuilder.Create <StockThreeTradeTask>() .WithIdentity("jobStockThreeTrade") .Build(); // 建立觸發器 ITrigger triggerStockThreeTrade = TriggerBuilder.Create() .WithCronSchedule("0 5/30 16-17 * * ?") // 每天1605-1705,每三十分鐘一次 //.WithCronSchedule("0/3 * * * * ?") // 每三秒觸發一次。 .WithIdentity("triggerStockThreeTrade") .Build(); //==盤後,巨量換手 // 建立工作 IJobDetail jobStockAfter = JobBuilder.Create <StockAfterTask>() .WithIdentity("jobStockAfter") .Build(); // 建立觸發器 ITrigger triggerStockAfter = TriggerBuilder.Create() .WithCronSchedule("0 11/30 15-17 * * ?") // 每天1511-1711,每三十分鐘一次 //.WithCronSchedule("0/3 * * * * ?") // 每三秒觸發一次。 .WithIdentity("triggerStockAfter") .Build(); //==券商買賣證券日報表查詢系統(暫停使用,因為無法驗證google grecaptcha) //// 建立工作 //IJobDetail jobStockBrokerBS = JobBuilder.Create<StockBrokerBSTask>() // .WithIdentity("jobStockBrokerBS") // .Build(); //// 建立觸發器 //ITrigger triggerStockBrokerBS = TriggerBuilder.Create() // .WithCronSchedule("0 5 16,18 * * ?") // 每天16:05 18:05執行 // //.WithCronSchedule("0/3 * * * * ?") // 每三秒觸發一次。 // .WithIdentity("triggerStockBrokerBS") // .Build(); //==當沖資料 // 建立工作 IJobDetail jobStockAfterRush = JobBuilder.Create <StockAfterRushTask>() .WithIdentity("jobStockAfterRush") .Build(); // 建立觸發器 ITrigger triggerStockAfterRush = TriggerBuilder.Create() .WithCronSchedule("0 0/30 16-23 * * ?") // 每天16-23時,每30分鐘 執行 .WithIdentity("triggerStockAfterRush") .Build(); // 把工作加入排程 _Scheduler.ScheduleJob(jobStockInfo, triggerStockInfo); _Scheduler.ScheduleJob(jobStockThreeTrade, triggerStockThreeTrade); _Scheduler.ScheduleJob(jobStockAfter, triggerStockAfter); //(暫停使用,因為無法驗證google grecaptcha) //_Scheduler.ScheduleJob(jobStockBrokerBS, triggerStockBrokerBS); _Scheduler.ScheduleJob(jobStockAfterRush, triggerStockAfterRush); // 啟動排程器 _Scheduler.Start(); //=========================================== //JobBuilder.Create<SendMailTask>(). //IJobDetail job = JobBuilder.Create().WithIdentity("test").Build(); //ITrigger tt = TriggerBuilder.Create() // .WithCronSchedule("") // .WithIdentity("") // .Build(); //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() // .WithSimpleSchedule(a => a.WithIntervalInSeconds(1).WithRepeatCount(10)) // .Build(); //_Scheduler.ScheduleJob(job, trigger); //_Scheduler.Start(); //===================================== ////1.0創建調度工廠 //ISchedulerFactory factory = new StdSchedulerFactory(); ////2.0通過工廠獲取調度器實例 //IScheduler scheduler = factory.GetScheduler(); ////3.0通過JobBuilder構建Job //IJobDetail job = JobBuilder.Create<JobGetNowTime>().Build(); ////4.0通過TriggerBuilder構建Trigger //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() // .WithSimpleSchedule(a => a.WithIntervalInSeconds(1).WithRepeatCount(10)) // .Build(); ////5.0組裝各個組件<Job,Trigger> //scheduler.ScheduleJob(job, trigger); ////6.0啟動 //scheduler.Start(); //Thread.Sleep(10000); ////7.0銷毀內置的Job和Trigger //scheduler.Shutdown(true); //Console.ReadKey(); }
private IScheduler _schedular = null; // Quartz排程器 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //## for Quarzt.NET // 建立排程器 ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(QuartzConfig()); _schedular = sf.GetScheduler(); _schedular.Start(); // 啟動Quartz排程器 #region Quarzt-建立工作與排程 //# 建立固定排程工作1,原則上一個Job呼應一個Trigger。 IJobDetail job1 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.MyQuartzJob>() .WithIdentity("job1") .Build(); ITrigger trigger1 = TriggerBuilder.Create() .WithIdentity("trigger1") .WithCronSchedule("0/5 * * * * ?") // 每5秒觸發一次。 .Build(); _schedular.ScheduleJob(job1, trigger1); //# 建立固定排程工作2,原則上一個Job呼應一個Trigger。 IJobDetail job2 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.SimpleJob>() .WithIdentity("job2", "MyGroup") .Build(); ITrigger trigger2 = TriggerBuilder.Create() .WithIdentity("trigger2", "MyGroup") .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()) // 每間隔10秒執行一次,不斷重複。 .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second)) // 5秒後開始執行 .EndAt(DateBuilder.FutureDate(2, IntervalUnit.Minute)) // 2分後停止執行 .Build(); _schedular.ScheduleJob(job2, trigger2); //# 先只建立Job IJobDetail job3 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.TestRetryableJob>() .WithIdentity("Job3") .WithDescription("Hi. This is the Job3.") .Build(); _schedular.AddJob(job3, true, true); // 再建立trigger 與已存在的Job掛勾。多個 trigger 可與同一個 job 掛勾 ITrigger trigger3 = TriggerBuilder.Create() .ForJob("Job3") // .WithIdentity("trigger3") .WithSimpleSchedule(s => s.WithIntervalInSeconds(4).WithRepeatCount(2)) // 每隔4秒重複2次,也就是總共跑3次 .StartAt(DateBuilder.FutureDate(7, IntervalUnit.Second)) // 7秒後開始執行 .Build(); ITrigger trigger4 = TriggerBuilder.Create() .ForJob("Job3") .WithIdentity("trigger4") .StartAt(DateBuilder.DateOf(14, 6, 0)) // 於指定時間 14:06:00 執行,若時間已過將會立刻執行。將只會執行一次。 .Build(); _schedular.ScheduleJob(trigger3); _schedular.ScheduleJob(trigger4); // 傳入參數給排程,Job 與 trigger 都給參數 IJobDetail job5 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.TestArgumentsJob>() .WithIdentity("job5", "MyGroup") .UsingJobData("JobArg1", "aaaaa") // 參數 .UsingJobData("JobArg2", "bbbbb") // 同名參數-預設效果 .Build(); ITrigger trigger5 = TriggerBuilder.Create() .WithIdentity("trigger5", "MyGroup") .StartAt(DateBuilder.FutureDate(6, IntervalUnit.Second)) // 5秒後開始執行 .UsingJobData("JobArg2", "xxxxx") // 同名參數-後來為主 .UsingJobData("JobArg3", "ccccc") .Build(); _schedular.ScheduleJob(job5, trigger5); // 傳入參數給排程 - 化簡程式碼 _schedular.ScheduleJob(JobBuilder.Create <WebApp_QuartzLab.MyQuartz.TestArgumentsJob>() .Build() , TriggerBuilder.Create() .StartAt(DateBuilder.FutureDate(12, IntervalUnit.Second)) // 5秒後開始執行 .UsingJobData("JobArg1", "AAA") // 參數 .UsingJobData("JobArg2", "XXX") .UsingJobData("JobArg3", "CCC") .Build()); #endregion }
private QuartzWrapper() { var schedulerFact = new Quartz.Impl.StdSchedulerFactory(); _scheduler = schedulerFact.GetScheduler(); _scheduler.Start(); }
/// <summary> /// 定时任务开始 /// </summary> /// <param name="logBuilder"></param> public static void StartJob() { Logger.Info("定时任务读取开始"); ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(); ServiceHelper._sched = sf.GetScheduler(); int jobCounter = 0; var currentService = ServiceHelper.CurrentWinService; if (currentService == null) { Logger.Error(null, $"找不到【{ServiceHelper.CurrentServiceName}】的配置"); return; } foreach (var quartzJob in currentService.QuartzJob.JobItemList) { //配置检查 if (string.IsNullOrWhiteSpace(quartzJob.JobKey) || string.IsNullOrWhiteSpace(quartzJob.Assembly) || string.IsNullOrWhiteSpace(quartzJob.QuartzCron)) { Logger.Error(null, $"QuartzJob.JobItem的JobKey,Assembly和QuartzCron不能为空. JobKey:{quartzJob.JobKey}, Assembly:{quartzJob.Assembly}, QuartzCron:{quartzJob.QuartzCron}"); continue; } //二选一 if (string.IsNullOrWhiteSpace(quartzJob.ClassName) && string.IsNullOrWhiteSpace(quartzJob.MethodName)) { Logger.Error(null, $"QuartzJob.JobItem的JobKey={quartzJob.JobKey}的ClassName或MethodName不能为空. ClassName:{quartzJob.ClassName}, MethodName:{quartzJob.MethodName}"); continue; } try { //如果执行方法不为空,则认为是没有继承Quartz.IJob if (!string.IsNullOrEmpty(quartzJob.MethodName)) { //如果执行的方法名不为空 var iIndex = quartzJob.MethodName.LastIndexOf("."); quartzJob.ClassName = quartzJob.MethodName.Substring(0, iIndex); //将方法名给到类名 quartzJob.MethodName = quartzJob.MethodName.Substring(iIndex + 1); //留下方法名 } Assembly assembly = ServiceHelper.GetAssembly(quartzJob.Assembly); var job = assembly.CreateInstance(quartzJob.ClassName, false); if (currentService.QuartzJob.JobItemList.Where(p => p.JobKey == quartzJob.JobKey).Count() > 1) { throw new Exception($"【{quartzJob.JobKey}】出现重复的JobKey"); } #region 指定执行方法的处理与验证 if (!string.IsNullOrEmpty(quartzJob.MethodName)) { //如果MethodName不为空,则启动本系统定时任务执行MethodName if (job == null) { throw new Exception($"未能实例化对象:{quartzJob.ClassName}"); } Type type = job.GetType(); var methodInfo = type.GetMethod(quartzJob.MethodName); if (methodInfo == null) { throw new Exception($"不存在方法名:{quartzJob.ClassName}.{quartzJob.MethodName}"); } object[] arrParam = null; if (!string.IsNullOrEmpty(quartzJob.Parameters)) { var arr = quartzJob.Parameters.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (arr.Length > 0) { arrParam = arr.ToArray(); } } CommonJob.AddJob(quartzJob.JobKey, job, methodInfo, arrParam); //完成后,实例化成CommonJob job = new CommonJob(); } else { //否则,校验ClassName是否继承了IJob if (!(job is IJob)) { throw new Exception(string.Format("{0},没有继承Quartz.IJob", quartzJob.ClassName)); } } #endregion //加载Job var jobKey = new JobKey(quartzJob.JobKey, ServiceHelper.TriggerGrouopName); var jobDetail = JobBuilder.Create(job.GetType()).UsingJobData("Parameters", quartzJob.Parameters).WithIdentity(jobKey).Build(); var jobTrig = new CronTriggerImpl(quartzJob.JobKey + "Trigger", ServiceHelper.TriggerGrouopName, quartzJob.QuartzCron); ServiceHelper._sched.ScheduleJob(jobDetail, jobTrig); jobCounter++; //添加适配器(可以利用适配器添加监听器) var matcher = KeyMatcher <JobKey> .KeyEquals(jobDetail.Key); matcherList.Add(matcher); Logger.Info($"读取成功. JobKey:{quartzJob.JobKey}"); } catch (Exception ex) { string msg = $"读取失败. JobKey:{quartzJob.JobKey}"; Logger.Error(ex, msg); throw ex; } } Logger.Info("定时任务读取完成"); if (jobCounter > 0) { ServiceHelper._sched.Start(); } }
public void StartScheduler() { Quartz.Impl.StdSchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory(); Quartz.IScheduler scheduler = factory.GetScheduler(); string myJobName = "MyFirstJob"; string myGroupName="MyGroup"; string[] jobNames = scheduler.GetJobNames(myGroupName); if (!jobNames.Contains(myJobName)) { Quartz.JobDetail job = new Quartz.JobDetail(myJobName, myGroupName, typeof(ConsoleJob1)); job.JobDataMap.Add("ExtraText", "Plinko"); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(2); trigger.Name = "myFirstTrigger"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("HelloWorld1")) { Quartz.JobDetail job = new Quartz.JobDetail("HelloWorld1", myGroupName, typeof(Quartz.Job.NoOpJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(15); trigger.Name = "HelloWorld1Trigger"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("HelloWorld2")) { Quartz.Impl.Calendar.HolidayCalendar calendar = new Quartz.Impl.Calendar.HolidayCalendar(); calendar.AddExcludedDate(DateTime.Now.ToUniversalTime()); calendar.AddExcludedDate(DateTime.Now.AddDays(4).ToUniversalTime()); scheduler.AddCalendar("randomHolidays", calendar, true, true); Quartz.JobDetail job = new Quartz.JobDetail("HelloWorld2", myGroupName, typeof(Quartz.Job.NoOpJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(15, 00); trigger.Name = "HelloWorld2Trigger"; trigger.Group = myGroupName; trigger.CalendarName = "randomHolidays"; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("TimeTrackerReminder")) { Quartz.JobDetail job = new Quartz.JobDetail("TimeTrackerReminder", myGroupName, typeof(Quartz.Job.NoOpJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeWeeklyTrigger(DayOfWeek.Monday, 8, 0); trigger.Name = "EveryMondayAtEight"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } if (!jobNames.Contains("UnscheduledJob")) { Quartz.JobDetail job = new Quartz.JobDetail("UnscheduledJob", myGroupName, typeof(Quartz.Job.NoOpJob)); scheduler.AddJob(job, true); } if (!jobNames.Contains("TwoAliens")) { Quartz.JobDetail job = new Quartz.JobDetail("TwoAliens", myGroupName, typeof(TwoAlienJob)); Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMonthlyTrigger(28, 23, 59); trigger.Name = "EveryFullMoon"; trigger.Group = myGroupName; scheduler.ScheduleJob(job, trigger); } scheduler.Start(); }