public Service1() { InitializeComponent(); Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); ISchedulerFactory schedFact = new StdSchedulerFactory(); _scheduler = schedFact.GetScheduler(); var parseJob = new JobDetailImpl("ParseJob", "ParserStuff", typeof(ParseJob)); var parseTrigger = new CronTriggerImpl("ParseTime", "ParserStuff", "0 0/10 * * * ?") // Exactly every ten minutes { StartTimeUtc = DateTime.UtcNow }; _scheduler.ScheduleJob(parseJob, parseTrigger); var summaryJob = new JobDetailImpl("SummaryJob", "SummaryStuff", typeof(SummaryJob)); var summaryTrigger = new CronTriggerImpl("SummaryTime", "SummaryStuff", "0 0 4 1/1 * ? *") // At 04:00 AM every night { StartTimeUtc = DateTime.UtcNow }; _scheduler.ScheduleJob(summaryJob, summaryTrigger); }
public void TestClone() { JobDetailImpl jobDetail = new JobDetailImpl(); JobDetailImpl clonedJobDetail = (JobDetailImpl) jobDetail.Clone(); Assert.AreEqual(jobDetail, clonedJobDetail); }
/// <param name="scheduleConfig">Setting Key from your CloudConfigurations, value format "hh:mm;hh:mm;"</param> /// <param name="jobType">must inherit from IJob</param> /// <param name="timeZoneId">See http://alexandrebrisebois.wordpress.com/2013/01/20/using-quartz-net-to-schedule-jobs-in-windows-azure-worker-roles/ for Ids</param> public void ScheduleDailyJob(string scheduleConfig, Type jobType, string timeZoneId) { var schedule = CloudConfigurationManager.GetSetting(scheduleConfig); if (schedule == "-") return; schedule.Split(';').Where(s => !string.IsNullOrWhiteSpace(s)).ToList().ForEach(h => { var index = h.IndexOf(':'); var hour = h.Substring(0, index); var minutes = h.Substring(index + 1, h.Length - (index + 1)); var job = new JobDetailImpl(jobType.Name + hour + minutes, null, jobType); var trigger = TriggerBuilder.Create() .StartNow() .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(Convert.ToInt32(hour,CultureInfo.InvariantCulture), Convert.ToInt32(minutes, CultureInfo.InvariantCulture)) .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(timeZoneId))) .Build(); sched.ScheduleJob(job, trigger); }); }
static void Start(IAppBuilder app) { // First, initialize Quartz.NET as usual. In this sample app I'll configure Quartz.NET by code. var schedulerFactory = new StdSchedulerFactory(); var scheduler = schedulerFactory.GetScheduler(); scheduler.Start(); // I'll add some global listeners //scheduler.ListenerManager.AddJobListener(new GlobalJobListener()); //scheduler.ListenerManager.AddTriggerListener(new GlobalTriggerListener()); // A sample trigger and job var trigger = TriggerBuilder.Create() .WithIdentity("myTrigger") .WithSchedule(DailyTimeIntervalScheduleBuilder.Create() .WithIntervalInSeconds(6)) .StartNow() .Build(); var job = new JobDetailImpl("myJob", null, typeof(HelloJob)); scheduler.ScheduleJob(job, trigger); // A cron trigger and job var cron = TriggerBuilder.Create() .WithIdentity("myCronTrigger") .ForJob(job.Key) .WithCronSchedule("0/10 * * * * ?") // every 10 seconds .Build(); scheduler.ScheduleJob(cron); // A dummy calendar //scheduler.AddCalendar("myCalendar", new DummyCalendar { Description = "dummy calendar" }, false, false); app.Use(QuartzNetWebConsole.Setup.Owin("/quartz/", () => scheduler)); }
public void TestTriggerFireExclusion() { sched.Start(); TestJob.JobHasFired = false; JobDetailImpl myDesc = new JobDetailImpl("name", "group", typeof(TestJob)); IOperableTrigger trigger = new CronTriggerImpl("trigName", "trigGroup", "0/15 * * * * ?"); AnnualCalendar calendar = new AnnualCalendar(); calendar.SetDayExcluded(DateTime.Now, true); sched.AddCalendar("calendar", calendar, true, true); trigger.CalendarName = "calendar"; sched.ScheduleJob(myDesc, trigger); IOperableTrigger triggerreplace = new CronTriggerImpl("foo", "trigGroup", "name", "group", "0/15 * * * * ?"); triggerreplace.CalendarName = "calendar"; sched.RescheduleJob(new TriggerKey("trigName", "trigGroup"), triggerreplace); Thread.Sleep(1000 * 20); Assert.IsFalse(TestJob.JobHasFired, "task must not be neglected - it is forbidden by the calendar"); calendar.SetDayExcluded(DateTime.Now, false); sched.AddCalendar("calendar", calendar, true, true); Thread.Sleep(1000 * 20); Assert.IsTrue(TestJob.JobHasFired, "task must be neglected - it is permitted by the calendar"); sched.DeleteJob(new JobKey("name", "group")); sched.DeleteCalendar("calendar"); sched.Shutdown(); }
public void TestWebRequestJobPassesFireInstanceIdInTheQueryString() { const string testFireInstanceId = "123"; using (WebApp.Start<Startup>(BaseHostingAddress)) // base hosting address { // Arrange var pluginRunner = new WebRequest.WebRequestJob(); _mockJobExecutionContext.SetupGet(p => p.FireInstanceId).Returns(testFireInstanceId); IJobDetail jobDetail = new JobDetailImpl("jobsettings", typeof (IJob)); jobDetail.JobDataMap.Add("actionType", "http"); jobDetail.JobDataMap.Add("method", "GET"); jobDetail.JobDataMap.Add("contentType", "text/plain"); jobDetail.JobDataMap.Add("uri", BaseHostingAddress + "/testapi/test?JobName=TestJob&FireInstanceId={$FireInstanceId}"); _mockJobExecutionContext.SetupGet(p => p.MergedJobDataMap).Returns(jobDetail.JobDataMap); _mockJobExecutionContext.SetupGet(p => p.JobDetail).Returns(jobDetail); // Act pluginRunner.Execute(_mockJobExecutionContext.Object); // Assert _mockJobExecutionContext.VerifySet(p => p.Result = "\"" + testFireInstanceId + "\"", Times.Once); } }
public void ExceptionPolicyNoRestartImmediately() { sched.Start(); JobKey jobKey = new JobKey("ExceptionPolicyNoRestartJob", "ExceptionPolicyNoRestartGroup"); JobDetailImpl exceptionJob = new JobDetailImpl(jobKey.Name, jobKey.Group, typeof (ExceptionJob)); exceptionJob.Durable = true; sched.AddJob(exceptionJob, false); ExceptionJob.ThrowsException = true; ExceptionJob.Refire = false; ExceptionJob.UnscheduleAllTriggers = false; ExceptionJob.UnscheduleFiringTrigger = false; ExceptionJob.LaunchCount = 0; sched.TriggerJob(jobKey); int i = 10; while ((i > 0) && (ExceptionJob.LaunchCount <= 1)) { i--; Thread.Sleep(200); if (ExceptionJob.LaunchCount > 1) { break; } } sched.DeleteJob(jobKey); Assert.AreEqual(1, ExceptionJob.LaunchCount, "The job should NOT have been refired after exception"); }
public virtual void AddSelfUpdaterCheckJob() { try { if (ConfigurationManager.AppSettings["SelfUpdaterCronTrigger"] != null) { try { var jobDetail = new JobDetailImpl("SelfUpdaterChecker", null, typeof(SelfUpdaterCheckJob)); HttpContext.Current.Application.Lock(); var executeJob = !bool.Parse(HttpContext.Current.Application["NugetSelfUpdatesToInstall"].ToString()); HttpContext.Current.Application.UnLock(); jobDetail.JobDataMap.Add("ExcecuteJob", executeJob); var cronExpression = ConfigurationManager.AppSettings["SelfUpdaterCronTrigger"]; var trigger = new CronTriggerImpl("TriggerSelfUpdaterChecker", "SelfUpdaterChecker", cronExpression); _sched.ScheduleJob(jobDetail, trigger); } catch (Exception e) { ErrorHandler.Publish(LogLevel.Error, "Failed to add selfUpdater job", e); } } } catch (Exception e) { ErrorHandler.Publish(LogLevel.Error, "Failed to add selfUpdater job", e); } }
public void TestSameDefaultPriority() { NameValueCollection config = new NameValueCollection(); config["quartz.threadPool.threadCount"] = "1"; config["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool"; IScheduler sched = new StdSchedulerFactory(config).GetScheduler(); DateTime n = DateTime.UtcNow; DateTime cal = new DateTime(n.Year, n.Month, n.Day, n.Hour, n.Minute, 1, n.Millisecond); IMutableTrigger trig1 = new SimpleTriggerImpl("T1", null, cal); IMutableTrigger trig2 = new SimpleTriggerImpl("T2", null, cal); JobDetailImpl jobDetail = new JobDetailImpl("JD", null, typeof (TestJob)); sched.ScheduleJob(jobDetail, trig1); trig2.JobKey = new JobKey(jobDetail.Key.Name); sched.ScheduleJob(trig2); sched.Start(); Thread.Sleep(2000); Assert.AreEqual("T1T2", result.ToString()); sched.Shutdown(); }
public void ScheduleJob(string jobName, ISchedule schedule, Action action) { var jobDetail = new JobDetailImpl(jobName, typeof (ActionJob)); jobDetail.JobDataMap[ActionJob.ActionParamName] = action; _quartzScheduler.ScheduleJob(jobDetail, ((TriggerWrapper) schedule).QuartzTrigger); _quartzScheduler.Start(); }
private void StartJob(JobDefinition job) { this.EventReporter.Trace("Creating job: " + job.JobName); if(job.Schedule is JobCronSchedule) { } else if(job.Schedule is JobSimpleSchedule) { var type = this.TypeLoader.LoadType(job.AssemblyName, job.ClassName); var genericJobWrapperType = typeof(JobWrapper<,>); var combinedJobType = genericJobWrapperType.MakeGenericType(type); var jobDetail = new JobDetailImpl(job.JobName, combinedJobType); var simpleSchedule = (JobSimpleSchedule)job.Schedule; ITrigger trigger; if (simpleSchedule.DelayStartMinutes != 0) { trigger = new SimpleTriggerImpl(job.JobName + "Trigger", DateBuilder.FutureDate(simpleSchedule.DelayStartMinutes,IntervalUnit.Minute), null, SimpleTriggerImpl.RepeatIndefinitely, TimeSpan.FromMinutes(simpleSchedule.IntervalMinutes)); } else { trigger = new SimpleTriggerImpl(job.JobName + "Trigger", null, SimpleTriggerImpl.RepeatIndefinitely, TimeSpan.FromMinutes(simpleSchedule.IntervalMinutes)); } this.Scheduler.ScheduleJob(jobDetail, trigger); } this.EventReporter.Trace("Done Creating " + job.JobName); }
public void TestSqlStatementInsertsNewRowIntoExistingTable() { using (var dbConnection = new SQLiteConnection(ConnectionString)) { // Arrange var pluginRunner = new SqlJob(); dbConnection.Open(); const string sql = "create table names (name varchar(20))"; var command = new SQLiteCommand(sql, dbConnection); command.ExecuteNonQuery(); IJobDetail jobDetail = new JobDetailImpl("TestJob1", typeof(IJob)); jobDetail.JobDataMap.Add("connectionString", ConnectionString); jobDetail.JobDataMap.Add("providerAssemblyName", @"System.Data.SQLite"); jobDetail.JobDataMap.Add("connectionClass", @"System.Data.SQLite.SQLiteConnection"); jobDetail.JobDataMap.Add("commandClass", @"System.Data.SQLite.SQLiteCommand"); jobDetail.JobDataMap.Add("dataAdapterClass", @"System.Data.SQLite.SQLiteDataAdapter"); jobDetail.JobDataMap.Add("nonQueryCommand", @"insert into names (name) values ('Me')"); _mockJobExecutionContext.SetupGet(p => p.MergedJobDataMap).Returns(jobDetail.JobDataMap); _mockJobExecutionContext.SetupGet(p => p.JobDetail).Returns(jobDetail); // Act pluginRunner.Execute(_mockJobExecutionContext.Object); // Assert const string resultSql = "select * from names"; var resultDa = new SQLiteDataAdapter(resultSql, dbConnection); var ds = new DataSet(); resultDa.Fill(ds, "Results"); Assert.Equal(1, ds.Tables.Count); Assert.Equal("Me", ds.Tables[0].Rows[0][0]); } }
public void SettingKeyShouldAlsoSetNameAndGroup() { JobDetailImpl detail = new JobDetailImpl(); detail.Key = new JobKey("name", "group"); Assert.That(detail.Name, Is.EqualTo("name")); Assert.That(detail.Group, Is.EqualTo("group")); }
public void Start() { IJobDetail berthInUasgeJob = new JobDetailImpl("NpcMmsJob", "NpcMessageJob", typeof(NpcMmsJob)); var trigger = new CronTriggerImpl("NpcMmsJobTrigger", "NpcMessageJob", "00 0/10 * * * ? *"); _scheduler.ScheduleJob(berthInUasgeJob, trigger); _scheduler.Start(); }
public static void Init() { var scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); var job = new JobDetailImpl("SearchJob", "jobs", typeof(SearchJob)); var trigger = new CronTriggerImpl("SearchTrigger", "jobs", ConfigurationManager.AppSettings["CronTrigger"]); scheduler.ScheduleJob(job, trigger); }
public void JobDetailsShouldBeSerializable() { JobDetailImpl original = new JobDetailImpl("name", "group", typeof (NoOpJob)); JobDetailImpl cloned = original.DeepClone(); Assert.That(cloned.Name, Is.EqualTo(original.Name)); Assert.That(cloned.Group, Is.EqualTo(original.Group)); Assert.That(cloned.Key, Is.EqualTo(original.Key)); }
public void SetUp() { fJobStore = new RAMJobStore(); fSignaler = new SampleSignaler(); fJobStore.Initialize(null, fSignaler); fJobDetail = new JobDetailImpl("job1", "jobGroup1", typeof (NoOpJob)); fJobDetail.Durable = true; fJobStore.StoreJob(fJobDetail, false); }
public override void TestAfterPropertiesSet_JobDetailGiven() { const string jobName = "jobName"; const string jobGroup = "jobGroup"; IJobDetail jd = new JobDetailImpl(jobName, jobGroup, typeof(NoOpJob)); cronTrigger.JobDetail = jd; cronTrigger.AfterPropertiesSet(); base.TestAfterPropertiesSet_JobDetailGiven(); Assert.AreSame(jd, cronTrigger.JobDetail, "job details weren't same"); }
public void TestEquals() { JobDetailImpl jd1 = new JobDetailImpl("name", "group", typeof (NoOpJob)); JobDetailImpl jd2 = new JobDetailImpl("name", "group", typeof (NoOpJob)); JobDetailImpl jd3 = new JobDetailImpl("namediff", "groupdiff", typeof (NoOpJob)); Assert.AreEqual(jd1, jd2); Assert.AreNotEqual(jd1, jd3); Assert.AreNotEqual(jd2, jd3); Assert.AreNotEqual(jd1, null); }
public void StartQuartz() { if (!scheduler.IsStarted) { scheduler.Start(); Quartz.IJobDetail job1 = new Quartz.Impl.JobDetailImpl("计算用户最新收益", "EarningsJob", typeof(EarningsJob)); Quartz.ICronTrigger trigger = new Quartz.Impl.Triggers.CronTriggerImpl("计算用户最新收益触发器", "triggergroup", "计算用户最新收益", "EarningsJob", "0 0 6 * * ?");//每天早上六点执行 scheduler.ScheduleJob(job1, trigger); Common.CustomLog.WriteLog("成功启动任务!" + scheduler.IsStarted); } }
public void TestExecuteMethodReturnsWhenPluginPathIsMissingInJobDataMap() { // Arrange var pluginRunner = new AssemblyPluginJob(); IJobDetail jobDetail = new JobDetailImpl("jobsettings", typeof(IJob)); _mockJobExecutionContext.SetupGet(p => p.JobDetail).Returns(jobDetail); // Act / Assert Assert.Throws<JobExecutionException>(() => pluginRunner.Execute(_mockJobExecutionContext.Object)); }
private void ScheduleImport(string Filename, int ImportDelay) { var startTime = new DateTimeOffset(DateTime.Now.AddMilliseconds(ImportDelay)); var jobTrigger = new SimpleTriggerImpl(Guid.NewGuid().ToString(), startTime); var jobDetails = new JobDetailImpl(Guid.NewGuid().ToString(), typeof(ImporterJob)); jobDetails.JobDataMap.Add("Filename", Filename); jobDetails.JobDataMap.Add("RetryCount", 0); Scheduler.ScheduleJob(jobDetails, jobTrigger); }
public static void AddJob() { log.Debug(" Called AddJob Method of Common Scheduler"); IRunAllJob myJob = new RunAllJob(); //JobDetailImpl jobDetail = new JobDetailImpl("Job1", "Group1", myJob.GetType()); JobDetailImpl jobDetail = new JobDetailImpl("AllJob", "AllGroup", myJob.GetType()); //CronTriggerImpl trigger = new CronTriggerImpl("Trigger1", "Group1", "0 * 8-17 * * ?"); //run every minute between the hours of 8am and 5pm // per minute 0 */1 * * * ? CronTriggerImpl trigger = new CronTriggerImpl("Trigger1", "AllGroup", "0 */1 * * * ?"); //run every minute between the hours of 8am and 5pm _scheduler.ScheduleJob(jobDetail, trigger); DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc(); }
private static IScheduler SetupScheduler() { var stdSchedulerFactory = new StdSchedulerFactory(); var scheduler = stdSchedulerFactory.GetScheduler(); var jobDetail = new JobDetailImpl("Dummy Job", typeof(DummyJob)); var trigger = TriggerBuilder.Create().WithIdentity("Dummy Job Trigger").WithCronSchedule("0 0/1 * ? * *").ForJob(jobDetail).StartNow().Build(); scheduler.ScheduleJob(jobDetail, trigger); return scheduler; }
public void TestJobFailsWhenPluginThrowsErrorDuringExecution() { // Arrange var pluginRunner = new AssemblyPluginJob(); string currentDirectory = Directory.GetCurrentDirectory(); IJobDetail jobDetail = new JobDetailImpl("jobsettings", typeof(IJob)); jobDetail.JobDataMap.Add("pluginPath", Path.Combine(currentDirectory, @"Resourses\R.Scheduler.FakeJobPluginWithError.dll")); _mockJobExecutionContext.SetupGet(p => p.JobDetail).Returns(jobDetail); // Act / Assert Assert.Throws<JobExecutionException>(() => pluginRunner.Execute(_mockJobExecutionContext.Object)); }
public void ShouldBeAbleToUseMixedProperties() { NameValueCollection properties = new NameValueCollection(); properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz"; properties["quartz.jobStore.dataSource"] = "default"; properties["quartz.jobStore.useProperties"] = false.ToString(); string connectionString; dbConnectionStrings.TryGetValue("SQLServer", out connectionString); properties["quartz.dataSource.default.connectionString"] = connectionString; properties["quartz.dataSource.default.provider"] = "SqlServer-20"; ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); sched.Clear(); JobDetailImpl jobWithData = new JobDetailImpl("datajob", "jobgroup", typeof(NoOpJob)); jobWithData.JobDataMap["testkey"] = "testvalue"; IOperableTrigger triggerWithData = new SimpleTriggerImpl("datatrigger", "triggergroup", 20, TimeSpan.FromSeconds(5)); triggerWithData.JobDataMap.Add("testkey", "testvalue"); triggerWithData.EndTimeUtc = DateTime.UtcNow.AddYears(10); triggerWithData.StartTimeUtc = DateTime.Now.AddMilliseconds(1000L); sched.ScheduleJob(jobWithData, triggerWithData); sched.Shutdown(); // try again with changing the useproperties against same set of data properties["quartz.jobStore.useProperties"] = true.ToString(); sf = new StdSchedulerFactory(properties); sched = sf.GetScheduler(); var triggerWithDataFromDb = sched.GetTrigger(new TriggerKey("datatrigger", "triggergroup")); var jobWithDataFromDb = sched.GetJobDetail(new JobKey("datajob", "jobgroup")); Assert.That(triggerWithDataFromDb.JobDataMap["testkey"], Is.EqualTo("testvalue")); Assert.That(jobWithDataFromDb.JobDataMap["testkey"], Is.EqualTo("testvalue")); // once more sched.DeleteJob(jobWithData.Key); sched.ScheduleJob(jobWithData, triggerWithData); sched.Shutdown(); properties["quartz.jobStore.useProperties"] = false.ToString(); sf = new StdSchedulerFactory(properties); sched = sf.GetScheduler(); triggerWithDataFromDb = sched.GetTrigger(new TriggerKey("datatrigger", "triggergroup")); jobWithDataFromDb = sched.GetJobDetail(new JobKey("datajob", "jobgroup")); Assert.That(triggerWithDataFromDb.JobDataMap["testkey"], Is.EqualTo("testvalue")); Assert.That(jobWithDataFromDb.JobDataMap["testkey"], Is.EqualTo("testvalue")); }
public static void AddHealthMonitoringJob() { const string trigger1 = "HealthMonitoring"; const string timeToRun = "0 0/10 * * * ?"; IMyJob myJob = new HealthMonitiorJob(); //This Constructor needs to be parameterless var jobDetail = new JobDetailImpl(trigger1 + Job, Group1, myJob.GetType()); var trigger = new CronTriggerImpl(trigger1, Group1, timeToRun) {TimeZone = TimeZoneInfo.Utc}; _scheduler.ScheduleJob(jobDetail, trigger); DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc(); if (nextFireTime != null) Log.Info(string.Format("{0}+{1}", Group1, trigger1), new Exception(nextFireTime.Value.ToString("u"))); }
public void TestExecuteMethodReturnsWhenPluginPathIsMissingInJobDataMap() { // Arrange var pluginRunner = new PluginRunner(); IJobDetail jobDetail = new JobDetailImpl("jobsettings", typeof(IJob)); _mockJobExecutionContext.SetupGet(p => p.JobDetail).Returns(jobDetail); // Act pluginRunner.Execute(_mockJobExecutionContext.Object); // Assert Assert.False(File.Exists("FakeJobPlugin.txt")); }
public static void AddJob() { isSchedulerStart = true; log.Error(" Now Job is Called for Deposti "); IDepositJob myJob = new DepositJob(); JobDetailImpl jobDetail = new JobDetailImpl("JobDeposit", "GroupDeposit", myJob.GetType()); //CronTriggerImpl trigger = new CronTriggerImpl("Trigger1", "Group1", "0 * 8-17 * * ?"); //run every minute between the hours of 8am and 5pm // per minute 0 */1 * * * ? // Night 2 o'clock==== 0 0 2 * * ? CronTriggerImpl trigger = new CronTriggerImpl("Trigger1", "GroupDeposit", "0 0 2 * * ?"); //run every minute between the hours of 8am and 5pm _scheduler.ScheduleJob(jobDetail, trigger); DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc(); }
public void StartSchedule() { ISchedulerFactory schedFactory = new StdSchedulerFactory(); IScheduler scheduler = schedFactory.GetScheduler(); scheduler.Start(); IJobDetail jobDetail = new JobDetailImpl("myJob", null, typeof(DataJob)); jobDetail.JobDataMap["data"] = new ExternalData(); jobDetail.JobDataMap["dataManager"] = new DataManager(); jobDetail.JobDataMap["dbContext"] = new UowData(); ISimpleTrigger trigger = new SimpleTriggerImpl("myTrigger", null, DateTime.UtcNow, DateTime.UtcNow.AddYears(1), SimpleTriggerImpl.RepeatIndefinitely, TimeSpan.FromHours(2)); scheduler.ScheduleJob(jobDetail, trigger); }
public static void AddBirthdayJob() { const string trigger1 = "EmailTasksTrigger"; const string jobName = trigger1 + Job; const string timeToRun = "0 0 2 * * ?"; IMyJob myJob = new BirthdayJob(); //This Constructor needs to be parameterless var jobDetail = new JobDetailImpl(jobName, Group1, myJob.GetType()); var trigger = new CronTriggerImpl(trigger1, Group1, timeToRun) {TimeZone = TimeZoneInfo.Utc}; _scheduler.ScheduleJob(jobDetail, trigger); DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc(); if (nextFireTime != null) Log.Debug(string.Format("{0}+{1}", Group1, trigger1), new Exception(nextFireTime.Value.ToString("u"))); }
protected virtual bool IsEqual(JobDetailImpl detail) { return((detail != null) && (detail.Name == Name) && (detail.Group == Group) && (detail.JobType == JobType)); }
/// <summary> /// Checks equality between given job detail and this instance. /// </summary> /// <param name="detail">The detail to compare this instance with.</param> /// <returns></returns> public bool Equals(JobDetailImpl detail) { return(IsEqual(detail)); }