public virtual void Run() { ILog log = LogManager.GetLogger(typeof(RemoteClientExample)); NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "RemoteClient"; // set thread pool info properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.threadPool.threadCount"] = "5"; properties["quartz.threadPool.threadPriority"] = "Normal"; // set remoting expoter properties["quartz.scheduler.proxy"] = "true"; properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler"; // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); // define the job and ask it to run JobDetail job = new JobDetail("remotelyAddedJob", "default", typeof(SimpleJob)); JobDataMap map = new JobDataMap(); map.Put("msg", "Your remotely added job has executed!"); job.JobDataMap = map; CronTrigger trigger = new CronTrigger("remotelyAddedTrigger", "default", "remotelyAddedJob", "default", DateTime.UtcNow, null, "/5 * * ? * *"); // schedule the job sched.ScheduleJob(job, trigger); log.Info("Remote job scheduled."); }
protected override void OnStart(string[] args) { try { //0 0 12 * * ? 每天12点触发 //0 15 10 ? * * 每天10点15分触发 //0 15 10 * * ? 每天10点15分触发 //0 15 10 * * ? * 每天10点15分触发 //0 15 10 * * ? 2005 2005年每天10点15分触发 //0 * 14 * * ? 每天下午的 2点到2点59分每分触发 //0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) //0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) //每天下午的 18点到18点59分(整点开始,每隔5分触发) //0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发 //0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发 //0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发 //0 15 10 15 * ? 每月15号上午10点15分触发 //0 15 10 L * ? 每月最后一天的10点15分触发 //0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发 //0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发 //0 15 10 ? * 6#3 每月的第三周的星期五开始触发 //0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次 //0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节) //发邮件工作任务 JobDetail m_TimingMailJobDetail1 = new JobDetail("打印测试文件", Guid.NewGuid().ToString("N"), typeof(RegularMailJob.RegularMail_T2)); JobDetail m_TimingMailJobDetail2 = new JobDetail("打印测试文件", Guid.NewGuid().ToString("N"), typeof(RegularMailJob.RegularMail_T2)); JobDetail m_TimingMailJobDetail3 = new JobDetail("打印测试文件", Guid.NewGuid().ToString("N"), typeof(RegularMailJob.RegularMail_T2)); //Trigger m_TimingMailTrigger = new SimpleTrigger(Guid.NewGuid().ToString("N"), Guid.NewGuid().ToString("N"), m_TimingMailJobDetail.Name, m_TimingMailJobDetail.Group, DateTime.UtcNow, null, 0, TimeSpan.FromDays(7)); //CronTrigger trigger = new CronTrigger("打印", "group1", "0/30 * * * * ?"); //从周一到周五每天上午的10点15分触发 CronTrigger trigger1 = new CronTrigger("打印1", "group1", "0 20 15 ? * MON-FRI"); CronTrigger trigger2 = new CronTrigger("打印2", "group2", "0 25 15 ? * MON-FRI"); CronTrigger trigger3 = new CronTrigger("打印3", "group3", "0 15 15 ? * MON-FRI"); SchedulerManager.GetScheduler().ScheduleJob(m_TimingMailJobDetail1, trigger1); log.Info("任务:" + m_TimingMailJobDetail1.FullName + " 已经调度成功!"); SchedulerManager.GetScheduler().ScheduleJob(m_TimingMailJobDetail2, trigger2); log.Info("任务:" + m_TimingMailJobDetail2.FullName + " 已经调度成功!"); SchedulerManager.GetScheduler().ScheduleJob(m_TimingMailJobDetail3, trigger3); log.Info("任务:" + m_TimingMailJobDetail3.FullName + " 已经调度成功!"); SchedulerManager.GetScheduler().Start(); log.Info("service started ok"); } catch (Exception ex) { log.Error("service started fail", ex); this.Stop(); } }
private void InitializeScheduler() { try { if (scheduler != null) { return; } Logger.Log.Debug("Initializing Collector scheduler..."); schedulerFactory = new StdSchedulerFactory(); scheduler = schedulerFactory.GetScheduler(); // BatDongSanJob jobDetail = new JobDetail("BatDongSanJob", null, typeof(BatDongSanJob)); string cronEx = CollectorConfiguration.BatDongSan.BatDongSanCronTriggerExpression; cronTrigger = new CronTrigger( "BatDongSanTrigger", null, cronEx ); cronTrigger.StartTimeUtc = DateTime.UtcNow; scheduler.ScheduleJob(jobDetail, cronTrigger); Logger.Log.Debug("Initialize Collector scheduler completely."); } catch (Exception ex) { Logger.Log.Error(ex); } }
public static Trigger Build(JobTrigger jobTrigger) { switch (jobTrigger.Type) { case TriggerType.Cron: CronTrigger trigger = new CronTrigger(); trigger.CronExpressionString = TrimDelimiter(jobTrigger.Value); return(trigger); case TriggerType.Monthly: var monthTime = BuildTime(jobTrigger.Value); return(TriggerUtils.MakeMonthlyTrigger(monthTime.DayOfMonth, monthTime.Hour, monthTime.Minute)); case TriggerType.Daily: var dailyTime = BuildTime(jobTrigger.Value); return(TriggerUtils.MakeDailyTrigger(dailyTime.Hour, dailyTime.Minute)); case TriggerType.Hourly: var hourTime = BuildTime(jobTrigger.Value); return(TriggerUtils.MakeHourlyTrigger(hourTime.Interval)); case TriggerType.Minutely: var minuteTime = BuildTime(jobTrigger.Value); return(TriggerUtils.MakeMinutelyTrigger(minuteTime.Interval)); case TriggerType.Secondly: var secondTime = BuildTime(jobTrigger.Value); return(TriggerUtils.MakeSecondlyTrigger(secondTime.Interval)); default: return(null); } }
public void TestAddTriggerTimeZoneForCronTriggerNotNull() { CronTrigger ct = new CronTrigger("foo", "bar"); bundle.AddTrigger(ct); Assert.IsNotNull(ct.TimeZone); }
public void ShouldSetLocalTimezoneOnCronTriggerWhenCalledScheduleTrigger() { // Arrange var myTrigger = new CronTrigger { Name = "TestTrigger", Group = "TestGroup", JobName = "TestJobName", JobGroup = "TestJobGroup", CronExpression = "0/30 * * * * ?" }; IJobDetail noOpJob = new JobDetailImpl("TestJobName", "TestJobGroup", typeof(NoOpJob)); _mockScheduler.Setup(x => x.GetJobDetail(It.IsAny <JobKey>())).Returns(noOpJob); _mockScheduler.Setup(x => x.CheckExists(It.IsAny <JobKey>())).Returns(true); ISchedulerCore schedulerCore = new SchedulerCore(_mockScheduler.Object, _mockPersistanceStore.Object); // Act schedulerCore.ScheduleTrigger(myTrigger); // Assert _mockScheduler.Verify(x => x.ScheduleJob( It.Is <ICronTrigger>(t => (Equals(t.TimeZone, TimeZoneInfo.Local)))), Times.Once); }
public void TestTriggerFireExclusion() { sched.Start(); TestJob.JobHasFired = false; JobDetail myDesc = new JobDetail("name", "group", typeof(TestJob)); Trigger trigger = new CronTrigger("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); Trigger triggerreplace = new CronTrigger("foo", "trigGroup", "name", "group", "0/15 * * * * ?"); triggerreplace.CalendarName = "calendar"; sched.RescheduleJob("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("name", "group"); sched.DeleteCalendar("calendar"); sched.Shutdown(); }
static testmethod void schedulerTest() { String CRON_EXP = '0 0 23 ? * *'; Test.startTest(); String jobId = System.schedule('SubContactUpdBatchScheduleTest', CRON_EXP, new SubscriptionContactUpdateBatchSchedule()); CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime FROM CronTrigger WHERE id = : jobId];
/// <summary> /// 启动运行计划 /// </summary> public virtual void Run() { try { ISchedulerFactory sf = new StdSchedulerFactory(); this._Scheduler = sf.GetScheduler(); //.. string strCronExpressionString = "";//Cron表达式 JobDetail job = new JobDetail("job1", "group1", typeof(AuthTestingQuartzJob)); CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1"); trigger.CronExpressionString = strCronExpressionString; //"0/20 * * * * ?"; this._Scheduler.AddJob(job, true); DateTime ft = this._Scheduler.ScheduleJob(trigger); ////启动计划 this._Scheduler.Start(); } catch (Exception) { //停止计划 this._Scheduler.Shutdown(true); } }
public void StartQuartz() { try { LogHelper.WriteInfo(typeof(QuartzManaer), "QuartzManaer执行"); IScheduler sched; ISchedulerFactory sf = new StdSchedulerFactory(); sched = sf.GetScheduler(); JobDetail jobEveryDayEpJob = new JobDetail("job1", "group1", typeof(EveryDayEpJob)); //IndexJob为实现了IJob接口的类 DateTime tsEveryDayEpJob = TriggerUtils.GetNextGivenSecondDate(null, 0); //7天以后第一次运行 Trigger triggertEveryDayEpJob = new CronTrigger("jobUpdateLoginStatus", "group1", "job1", "group1", tsEveryDayEpJob, null, cronTriggerLambda); //每天23点执行时间,"秒 分 时 天 月 年" sched.AddJob(jobEveryDayEpJob, true); sched.ScheduleJob(triggertEveryDayEpJob); sched.Start(); } catch (Exception ex) { LogHelper.WriteLog(typeof(QuartzManaer), "QuartzManaer异常", Engineer.ccc, null, ex); } }
public Form1() { InitializeComponent(); // Instantiate the Quartz.NET scheduler StdSchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler(); // Instantiate the JobDetail object passing in the type of your // custom job class. Your class merely needs to implement a simple // interface with a single method called "Execute". JobDetail job = new JobDetail("job1", "group1", typeof(MyJobClass)); DateTime now = DateTime.Now.AddMinutes(1); DateTime dt = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0); CronTrigger trigger = new CronTrigger("trigger 1", "group1", "job1", "group1", "5 * * * * ?"); //CronTrigger ct = new CronTrigger( "trigger 1", "group1", "job1", "group1", "5 * * * * ?" ); //SimpleTrigger trigger = new SimpleTrigger( "trigger 1", new DateTime( dt.ToFileTimeUtc() ), null, SimpleTrigger.RepeatIndefinitely, new TimeSpan( 0, 0, 0, 15 ) ); //trigger.JobName = "job1"; //trigger.Group = "group1"; //trigger.JobGroup = "group1"; // Instantiate a trigger using the basic cron syntax. // This tells it to run at 1AM every Monday - Friday. // Add the job to the scheduler scheduler.AddJob(job, true); scheduler.ScheduleJob(trigger); scheduler.Start(); }
private static void SetTrigger(DateTime triggerTime, Types.TradingTimeType timeType, string id) { DateTime now = DateTime.Now; DateTime time = new DateTime(now.Year, now.Month, now.Day, triggerTime.Hour, triggerTime.Minute, triggerTime.Second); string expFormat = "{0} {1} {2} ? * *"; string exp = String.Format(expFormat, time.Second, time.Minute, time.Hour); ScheduleEventArgs args = new ScheduleEventArgs { //BourseTypeID = bourseType.BourseTypeID, TimeType = timeType, Time = time }; string newTriggerName = id + "trigger"; string newGroupName = id + "Group"; CronTrigger trigger = new CronTrigger(newTriggerName, newGroupName, exp); trigger.JobDataMap.SetScheduleEventArgs(args); string newJobName = id + "job"; JobDetail job = new JobDetail(newJobName, null, typeof(ScheduleJob)); scheduler.ScheduleJob(job, trigger); string format = "ScheduleManager.SetTrigger[JobName={0},TiggerName={1},GroupName={2}]"; string desc = string.Format(format, newJobName, newTriggerName, newGroupName); //LogHelper.WriteDebug(desc + " Args=" + args); LogHelper.WriteDebug("ScheduleManager.SetTrigger" + args); }
private void LoadSchedules(LogStatuses status) { Logger.Log("Loading schedules", status); if (!running) { Logger.Log("Loading schedules aborted. Service is not started.", status); return; } try { StdSchedulerFactory schedulerFactory = new StdSchedulerFactory(); scheduler = schedulerFactory.GetScheduler(); List <BackupScheduleWrapper> jobs = Configuration.GetSchedules(); foreach (BackupScheduleWrapper bj in jobs) { JobDetail job = new JobDetail(bj.ID.ToString(), "group1", typeof(MyJobClass)); try { CronTrigger trigger = new CronTrigger("trigger {0}".FillBlanks(bj.ID), "group1", bj.ID.ToString(), "group1", bj.CronConfig); scheduler.AddJob(job, true); scheduler.ScheduleJob(trigger); Logger.Log(string.Format("Job {0} ({1}) added to schedule", bj.ID, bj.Name), LogStatuses.Message); } catch (Exception ex) { Logger.Log(string.Format("Error adding job {0} ({1}) to schedule: {2}", bj.ID, bj.Name, ex.Message), LogStatuses.Error); } } scheduler.Start(); } catch (Exception oEx) { Logger.Log(string.Format("Error scheduling jobs: {0}", oEx.Message), LogStatuses.Error); } }
private void ScheduleCronJob() { foreach (ISchedulerConfig schedulerConfig in config.Scheduler) { string jobName = schedulerConfig.TaskId; if (string.IsNullOrEmpty(jobName)) { Log.Warn("No task to run. Skipping."); } var task = config.Tasks.SingleOrDefault(t => t.TaskId == jobName); if (task == null) { Log.ErrorFormat("Task '{0}' does not exists. Skipping.", jobName); continue; } Type jobType = task.TaskType; string jobGroup = jobName + "Group"; string cronExpression = schedulerConfig.CronExpression; var trigger = new CronTrigger(jobName, jobGroup, cronExpression) { StartTimeUtc = DateTime.UtcNow, MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing }; var job = new JobDetail(jobName, jobType); scheduler.ScheduleJob(job, trigger); Log.InfoFormat("{0} scheduled with cron expression {1}", jobName, cronExpression); } }
public static Trigger Create(NodeTaskRuntimeInfo nodetask) { CronTrigger triger = new CronTrigger(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString()); triger.CronExpressionString = nodetask.TaskModel.TaskCron; return(triger); }
public QueryResponse Post([FromBody] CronTrigger model) { Logger.DebugFormat("Entered TriggersController.Post(). Name = {0}", model.Name); var response = new QueryResponse { Valid = true }; try { _schedulerCore.ScheduleTrigger(model); } catch (Exception ex) { string type = "Server"; if (ex is FormatException) { type = "Sender"; } response.Valid = false; response.Errors = new List <Error> { new Error { Code = "ErrorSchedulingTrigger", Type = type, Message = string.Format("Error scheduling CronTrigger {0}", ex.Message) } }; } return(response); }
/// <summary> /// 按每天 /// </summary> /// <returns></returns> private Trigger GetTriggerEveryDay() { //TODO:检验规则是否合法 Trigger trigger = new CronTrigger(); double dblStartNDay = Convert.ToDouble(nDay.Value); if (cbEndDatetime.Checked) { if (rbtEveryDay.Checked) { string cronExpression = string.Format("{0} {1} {2} ? * *", GetTrigSecond(), GetTrigMinute(), GetTrigHour()); trigger = new CronTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), GetEndDateTime(), cronExpression); } if (rbtEveryWeekDay.Checked) { string cronExpression = string.Format("{0} {1} {2} ? * {3}", GetTrigSecond(), GetTrigMinute(), GetTrigHour(), "MON-FRI"); trigger = new CronTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), GetEndDateTime(), cronExpression); } if (rbtEveryWeekend.Checked) { string cronExpression = string.Format("{0} {1} {2} ? * {3}", GetTrigSecond(), GetTrigMinute(), GetTrigHour(), "SAT-SUN"); trigger = new CronTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), GetEndDateTime(), cronExpression); } if (rbtEveryNDay.Checked) { //string cronExpression = string.Format("{0} {1} {2} {3} * ?", GetTrigHour(), GetTrigMinute(), GetTrigSecond(), strStartNDay); //trigger = new CronTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), GetEndDateTime(), cronExpression); //SimpleTrigger trigger = new SimpleTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), GetEndDateTime(), 0, TimeSpan.FromDays(dblStartNDay)); } return(trigger); } else { if (rbtEveryDay.Checked) { string cronExpression = string.Format("{0} {1} {2} ? * *", GetTrigSecond(), GetTrigMinute(), GetTrigHour()); trigger = new CronTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), null, cronExpression); } if (rbtEveryWeekDay.Checked) { string cronExpression = string.Format("{0} {1} {2} ? * {3}", GetTrigSecond(), GetTrigMinute(), GetTrigHour(), "MON-FRI"); trigger = new CronTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), null, cronExpression); } if (rbtEveryWeekend.Checked) { string cronExpression = string.Format("{0} {1} {2} ? * {3}", GetTrigSecond(), GetTrigMinute(), GetTrigHour(), "SAT-SUN"); trigger = new CronTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), null, cronExpression); } if (rbtEveryNDay.Checked) { trigger = new SimpleTrigger(txtTriggerName.Text, txtTriggerGroup.Text, JobName, JobGroupName, GetStartDateTime(), null, 0, TimeSpan.FromDays(dblStartNDay)); } return(trigger); } }
public void NameReturnsSetName() { var name = "testName"; var trigger = new CronTrigger { Name = name }; Assert.AreEqual(name, trigger.Name); }
public void create_cronTrigger() { var trigger = new CronTrigger { Sensors = _ports, CronExpression = "* * * 8" }; DbCtx.Triggers.Add(trigger); DbCtx.SaveChanges(); }
public QuartzService() { string cronExpression = ConfigurationSettings.AppSettings["CronExpression"]; CronTrigger cronTrigger = new CronTrigger(CRON_TRIGGER_NAME, null, cronExpression); JobDetail jobDetail = new JobDetail(JOB_DETAIL_NAME, null, typeof(EventLogJob)); ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); scheduler = schedulerFactory.GetScheduler(); scheduler.ScheduleJob(jobDetail, cronTrigger); }
public static void ScheduleHeartbeatJob(string projectId) { string jobName = "Heartbeat_" + projectId; JobDetail job = new JobDetail(jobName, jobName, typeof(HeartbeatJob)); job.JobDataMap["projectId"] = projectId; CronTrigger trigger = new CronTrigger(jobName, jobName, jobName, jobName, FIVE_MINUTE_PATTERN); engine.AddJob(job, true); DateTime ft = engine.ScheduleJob(trigger); }
public void BasicCronTriggerTest() { CronTrigger trigger = new CronTrigger(); trigger.Name = "Quartz-Sample"; trigger.Group = SchedulerConstants.DefaultGroup; trigger.CronExpressionString = "0 0 12 1 1 ? 2099"; trigger.StartTimeUtc = new DateTime(2099, 1, 1, 12, 0, 1); trigger.EndTimeUtc = new DateTime(2099, 1, 1, 12, 0, 1); Assert.IsNull(trigger.ComputeFirstFireTimeUtc(null)); }
public static void ScheduleSqlJob(string projectId) { string jobName = "Report_" + projectId; JobDetail job = new JobDetail(jobName, jobName, typeof(SqlJob)); job.JobDataMap["projectId"] = projectId; job.JobDataMap["lastTime"] = Monitor.Common.ScheduleSetting.GetLastTime(projectId); CronTrigger trigger = new CronTrigger(jobName, jobName, jobName, jobName, Monitor.Common.SystemInternalSetting.Frequence); engine.AddJob(job, true); DateTime ft = engine.ScheduleJob(trigger); }
public static Trigger BuildTrigger(string cronExpression, string triggerName) { CronTrigger trigger = new CronTrigger(); trigger.CronExpressionString = cronExpression; //ctrigger.CronExpressionString = "0/2 * * * * ?"; trigger.Name = triggerName; trigger.Group = Keys.TRIGGERGROUP; trigger.JobName = Keys.JOBNAME; trigger.JobGroup = Keys.JOBGROUP; return(trigger); }
public void FireReturnsRequestIfMatched() { var today = DateTime.Today; var trigger = new CronTrigger { CronExpression = today.ToString("* * d * *") }; trigger.StartDate = DateTime.Today; var actual = trigger.Fire(); Assert.IsNotNull(actual); }
public void ScheduleCronTrigger(CronTrigger trigger) { var jobDetail = Quartz.JobBuilder.Create(typeof(QuartzJobWrapper)) .WithIdentity(trigger.Id) .UsingJobData("settings", trigger.JobId) .Build(); var qTrigger = Quartz.TriggerBuilder.Create() .WithIdentity(trigger.Id) .WithSchedule(Quartz.CronScheduleBuilder.CronSchedule(((CronTrigger)trigger).Cron)) .Build(); _scheduler.ScheduleJob(jobDetail, qTrigger); }
protected override void OnStart(string[] args) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); _scheduler = schedulerFactory.GetScheduler(); IJob myJob = new MinistrySchedule(); JobDetail jobDetail = new JobDetail("MinistryJob", "Group1", myJob.GetType()); Trigger trigger = new CronTrigger("MinistryTrigger", "Group1", /*"0 00 6 * * ? *"*/ "0 0/1 * * * ?"); _scheduler.ScheduleJob(jobDetail, trigger); _scheduler.Start(); }
protected override void OnStart(string[] args) { ISchedulerFactory schedFact = new StdSchedulerFactory(); scheduler = schedFact.GetScheduler(); scheduler.Start(); string dataCollectCronScheduler = ConfigurationManager.AppSettings["dataCollectJobCron"]; ITrigger cronTrigger = CronTrigger.CreateTrigger(dataCollectCronScheduler); IJobDetail dataCollectorJob = DataCollectorJob.Create(); // Schedule Jobs scheduler.ScheduleJob(dataCollectorJob, cronTrigger); }
public void IntegrationCompletedDoesNothingIfNotTriggered() { var trigger = new CronTrigger { CronExpression = "* * 1 1 *" }; trigger.Fire(); var nextTime = trigger.NextBuild; trigger.StartDate = DateTime.Now.AddHours(2); trigger.IntegrationCompleted(); Assert.AreEqual(nextTime, trigger.NextBuild); }
public void SetUp() { CronTrigger = new CronTrigger() { Id = "one", JobType = IntegrationJobStub.FullName, CronExpressionString = "* * * * * ?", }; Subject.IntegrationJobTypes = new List <Type>() { IntegrationJobStub.Type }; MockScheduler = new Mock <IScheduler>(); Subject.Scheduler = MockScheduler.Object; }
public static Trigger CreateTigger(NodeTaskRuntimeInfo taskruntimeinfo) { if (taskruntimeinfo.TaskModel.taskcron.Contains("[")) { var customcorn = CustomCornFactory.GetCustomCorn(taskruntimeinfo.TaskModel.taskcron); customcorn.Parse(); if (customcorn is SimpleCorn || customcorn is RunOnceCorn) { var simplecorn = customcorn as SimpleCorn; // 定义调度触发规则,比如每1秒运行一次,共运行8次 SimpleTrigger simpleTrigger = new SimpleTrigger(taskruntimeinfo.TaskModel.id.ToString(), taskruntimeinfo.TaskModel.categoryid.ToString()); if (simplecorn.ConInfo.StartTime != null) { simpleTrigger.StartTimeUtc = simplecorn.ConInfo.StartTime.Value.ToUniversalTime(); } //else // simpleTrigger.StartTimeUtc = DateTime.Now.ToUniversalTime(); if (simplecorn.ConInfo.EndTime != null) { simpleTrigger.EndTimeUtc = simplecorn.ConInfo.EndTime.Value.ToUniversalTime(); } if (simplecorn.ConInfo.RepeatInterval != null) { simpleTrigger.RepeatInterval = TimeSpan.FromSeconds(simplecorn.ConInfo.RepeatInterval.Value); } else { simpleTrigger.RepeatInterval = TimeSpan.FromSeconds(1); } if (simplecorn.ConInfo.RepeatCount != null) { simpleTrigger.RepeatCount = simplecorn.ConInfo.RepeatCount.Value - 1;//因为任务默认执行一次,所以减一次 } else { simpleTrigger.RepeatCount = int.MaxValue;//不填,则默认最大执行次数 } return(simpleTrigger); } return(null); } else { CronTrigger trigger = new CronTrigger(taskruntimeinfo.TaskModel.id.ToString(), taskruntimeinfo.TaskModel.categoryid.ToString()); // 触发器名,触发器组 trigger.CronExpressionString = taskruntimeinfo.TaskModel.taskcron; // 触发器时间设定 return(trigger); } }
private void ProcessJobs(quartz data) { if (data.job == null) { // no jobs to process, file is empty return; } foreach (jobType jt in data.job) { JobSchedulingBundle jsb = new JobSchedulingBundle(); jobdetailType j = jt.jobdetail; Type jobType = Type.GetType(j.jobtype); if (jobType == null) { throw new SchedulerConfigException("Unknown job type " + j.jobtype); } JobDetail jd = new JobDetail(j.name, j.group, jobType, j.@volatile, j.durable, j.recover); jd.Description = j.description; if (j.joblistenerref != null && j.joblistenerref.Trim().Length > 0) { jd.AddJobListener(j.joblistenerref); } jsb.JobDetail = jd; // read job data map if (j.jobdatamap != null && j.jobdatamap.entry != null) { foreach (entryType entry in j.jobdatamap.entry) { jd.JobDataMap.Put(entry.key, entry.value); } } triggerType[] tArr = jt.trigger; if (tArr == null) { // set to empty tArr = new triggerType[0]; } foreach (triggerType t in tArr) { Trigger trigger; if (t.Item is cronType) { cronType c = (cronType) t.Item; DateTime startTime = (c.starttime == DateTime.MinValue ? DateTime.UtcNow : c.starttime); NullableDateTime endTime = (c.endtime == DateTime.MinValue ? null : (NullableDateTime)c.endtime); string jobName = c.jobname != null ? c.jobname : j.name; string jobGroup = c.jobgroup != null ? c.jobgroup : j.group; CronTrigger ct = new CronTrigger( c.name, c.group, jobName, jobGroup, startTime, endTime, c.cronexpression); if (c.timezone != null && c.timezone.Trim().Length > 0) { #if NET_35 ct.TimeZone = TimeZoneInfo.FindSystemTimeZoneById(c.timezone); #else throw new ArgumentException( "Specifying time zone for cron trigger is only supported in .NET 3.5 builds"); #endif } trigger = ct; } else if (t.Item is simpleType) { simpleType s = (simpleType) t.Item; DateTime startTime = (s.starttime == DateTime.MinValue ? DateTime.UtcNow : s.starttime); NullableDateTime endTime = (s.endtime == DateTime.MinValue ? null : (NullableDateTime)s.endtime); string jobName = s.jobname != null ? s.jobname : j.name; string jobGroup = s.jobgroup != null ? s.jobgroup : j.group; SimpleTrigger st = new SimpleTrigger( s.name, s.group, jobName, jobGroup, startTime, endTime, ParseSimpleTriggerRepeatCount(s.repeatcount), TimeSpan.FromMilliseconds(Convert.ToInt64(s.repeatinterval, CultureInfo.InvariantCulture))); trigger = st; } else { throw new ArgumentException("Unknown trigger type in XML"); } trigger.Description = t.Item.description; trigger.CalendarName = t.Item.calendarname; if (t.Item.misfireinstruction != null) { trigger.MisfireInstruction = ReadMisfireInstructionFromString(t.Item.misfireinstruction); } if (t.Item.jobdatamap != null && t.Item.jobdatamap.entry != null) { foreach (entryType entry in t.Item.jobdatamap.entry) { if (trigger.JobDataMap.Contains(entry.key)) { Log.Warn("Overriding key '" + entry.key + "' with another value in same trigger job data map"); } trigger.JobDataMap[entry.key] = entry.value; } } if (t.Item.triggerlistenerref != null && t.Item.triggerlistenerref.Trim().Length > 0) { trigger.AddTriggerListener(t.Item.triggerlistenerref); } jsb.Triggers.Add(trigger); } AddJobToSchedule(jsb); } }
/// <summary> /// Make a trigger that will fire every week at the given day and time. /// <p> /// The generated trigger will not have its name, group, /// or end-time set. The Start time defaults to 'now'. /// </p> /// </summary> /// <param name="dayOfWeek">(1-7) the day of week upon which to fire</param> /// <param name="hour">the hour (0-23) upon which to fire</param> /// <param name="minute">the minute (0-59) upon which to fire</param> /// <returns>the new trigger</returns> public static Trigger MakeWeeklyTrigger(DayOfWeek dayOfWeek, int hour, int minute) { ValidateHour(hour); ValidateMinute(minute); CronTrigger trig = new CronTrigger(); try { trig.CronExpressionString = string.Format(CultureInfo.InvariantCulture, "0 {0} {1} ? * {2}", minute, hour, ((int) dayOfWeek + 1)); } catch (Exception) { return null; /* never happens... */ } trig.StartTimeUtc = DateTime.UtcNow; return trig; }
/// <summary> /// Make a trigger that will fire every month at the given day and time. /// <p> /// The generated trigger will not have its name, group, /// or end-time set. The Start time defaults to 'now'. /// </p> /// <p> /// If the day of the month specified does not occur in a given month, a /// firing will not occur that month. (i.e. if dayOfMonth is specified as /// 31, no firing will occur in the months of the year with fewer than 31 /// days). /// </p> /// </summary> /// <param name="dayOfMonth">(1-31, or -1) the day of week upon which to fire</param> /// <param name="hour">the hour (0-23) upon which to fire</param> /// <param name="minute">the minute (0-59) upon which to fire</param> /// <returns>the newly created trigger</returns> public static Trigger MakeMonthlyTrigger(int dayOfMonth, int hour, int minute) { ValidateDayOfMonth(dayOfMonth); ValidateHour(hour); ValidateMinute(minute); CronTrigger trig = new CronTrigger(); try { if (dayOfMonth != LastDayOfMonth) { trig.CronExpressionString = string.Format(CultureInfo.InvariantCulture, "0 {0} {1} {2} * ?", minute, hour, dayOfMonth); } else { trig.CronExpressionString = string.Format(CultureInfo.InvariantCulture, "0 {0} {1} L * ?", minute, hour); } } catch (Exception) { return null; /* never happens... */ } trig.StartTimeUtc = DateTime.UtcNow; return trig; }
/// <summary> /// Insert the cron trigger data. /// </summary> /// <param name="conn">the DB Connection</param> /// <param name="trigger">the trigger to insert</param> /// <returns>the number of rows inserted</returns> public virtual int InsertCronTrigger(ConnectionAndTransactionHolder conn, CronTrigger trigger) { using (IDbCommand cmd = PrepareCommand(conn, ReplaceTablePrefix(SqlInsertCronTrigger))) { AddCommandParameter(cmd, 1, "triggerName", trigger.Name); AddCommandParameter(cmd, 2, "triggerGroup", trigger.Group); AddCommandParameter(cmd, 3, "triggerCronExpression", trigger.CronExpressionString); #if NET_35 AddCommandParameter(cmd, 4, "triggerTimeZone", trigger.TimeZone.Id); #else AddCommandParameter(cmd, 4, "triggerTimeZone", trigger.TimeZone.StandardName); #endif return cmd.ExecuteNonQuery(); } }
/// <summary> /// Select a trigger. /// </summary> /// <param name="conn">the DB Connection</param> /// <param name="triggerName">the name of the trigger</param> /// <param name="groupName">the group containing the trigger</param> /// <returns>The <see cref="Trigger" /> object</returns> public virtual Trigger SelectTrigger(ConnectionAndTransactionHolder conn, string triggerName, string groupName) { Trigger trigger = null; string jobName = null; string jobGroup = null; bool volatility = false; string description = null; string triggerType = ""; string calendarName = null; int misFireInstr = Int32.MinValue; int priority = Int32.MinValue; IDictionary map = null; NullableDateTime pft = null; NullableDateTime endTimeD = null; NullableDateTime nft = null; DateTime startTimeD = DateTime.MinValue; using (IDbCommand cmd = PrepareCommand(conn, ReplaceTablePrefix(SqlSelectTrigger))) { AddCommandParameter(cmd, 1, "triggerName", triggerName); AddCommandParameter(cmd, 2, "triggerGroup", groupName); using (IDataReader rs = cmd.ExecuteReader()) { if (rs.Read()) { jobName = GetString(rs[ColumnJobName]); jobGroup = GetString(rs[ColumnJobGroup]); volatility = GetBoolean(rs[ColumnIsVolatile]); description = GetString(rs[ColumnDescription]); long nextFireTime = Convert.ToInt64(rs[ColumnNextFireTime], CultureInfo.InvariantCulture); long prevFireTime = Convert.ToInt64(rs[ColumnPreviousFireTime], CultureInfo.InvariantCulture); triggerType = GetString(rs[ColumnTriggerType]); long startTime = Convert.ToInt64(rs[ColumnStartTime], CultureInfo.InvariantCulture); long endTime = Convert.ToInt64(rs[ColumnEndTime], CultureInfo.InvariantCulture); calendarName = GetString(rs[ColumnCalendarName]); misFireInstr = Convert.ToInt32(rs[ColumnMifireInstruction], CultureInfo.InvariantCulture); priority = Convert.ToInt32(rs[ColumnPriority], CultureInfo.InvariantCulture); if (CanUseProperties) { map = GetMapFromProperties(rs, 15); } else { map = (IDictionary)GetObjectFromBlob(rs, 15); } if (nextFireTime > 0) { nft = new DateTime(nextFireTime); } if (prevFireTime > 0) { pft = new DateTime(prevFireTime); } startTimeD = new DateTime(startTime); if (endTime > 0) { endTimeD = new DateTime(endTime); } // done reading rs.Close(); if (triggerType.Equals(TriggerTypeSimple)) { using (IDbCommand cmd2 = PrepareCommand(conn, ReplaceTablePrefix(SqlSelectSimpleTrigger))) { AddCommandParameter(cmd2, 1, "triggerName", triggerName); AddCommandParameter(cmd2, 2, "triggerGroup", groupName); using (IDataReader rs2 = cmd2.ExecuteReader()) { if (rs2.Read()) { int repeatCount = Convert.ToInt32(rs2[ColumnRepeatCount], CultureInfo.InvariantCulture); long repeatInterval = Convert.ToInt64(rs2[ColumnRepeatInterval], CultureInfo.InvariantCulture); int timesTriggered = Convert.ToInt32(rs2[ColumnTimesTriggered], CultureInfo.InvariantCulture); SimpleTrigger st = new SimpleTrigger(triggerName, groupName, jobName, jobGroup, startTimeD, endTimeD, repeatCount, TimeSpan.FromMilliseconds(repeatInterval)); st.CalendarName = calendarName; st.MisfireInstruction = misFireInstr; st.TimesTriggered = timesTriggered; st.Volatile = volatility; st.SetNextFireTime(nft); st.SetPreviousFireTime(pft); st.Description = description; st.Priority = priority; if (null != map) { st.JobDataMap = new JobDataMap(map); } trigger = st; } } } } else if (triggerType.Equals(TriggerTypeCron)) { using (IDbCommand cmd2 = PrepareCommand(conn, ReplaceTablePrefix(SqlSelectCronTriggers))) { AddCommandParameter(cmd2, 1, "triggerName", triggerName); AddCommandParameter(cmd2, 2, "triggerGroup", groupName); using (IDataReader rs2 = cmd2.ExecuteReader()) { if (rs2.Read()) { string cronExpr = GetString(rs2[ColumnCronExpression]); string timeZoneId = GetString(rs2[ColumnTimeZoneId]); CronTrigger ct = null; try { TimeZone timeZone = null; if (timeZoneId != null) { #if NET_35 timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); #endif } ct = new CronTrigger(triggerName, groupName, jobName, jobGroup, startTimeD, endTimeD, cronExpr, timeZone); } catch (Exception ex) { logger.Warn("Got error from expression, still continuing", ex); // expr must be valid, or it never would have // gotten to the store... } if (null != ct) { ct.CalendarName = calendarName; ct.MisfireInstruction = misFireInstr; ct.Volatile = volatility; ct.SetNextFireTime(nft); ct.SetPreviousFireTime(pft); ct.Description = description; if (null != map) { ct.JobDataMap = new JobDataMap(map); } trigger = ct; } } } } } else if (triggerType.Equals(TriggerTypeBlob)) { using (IDbCommand cmd2 = PrepareCommand(conn, ReplaceTablePrefix(SqlSelectBlobTrigger))) { AddCommandParameter(cmd2, 1, "triggerName", triggerName); AddCommandParameter(cmd2, 2, "triggerGroup", groupName); using (IDataReader rs2 = cmd2.ExecuteReader()) { if (rs2.Read()) { trigger = (Trigger)GetObjectFromBlob(rs2, 2); } } } } else { throw new Exception("Class for trigger type '" + triggerType + "' not found."); } } } } return trigger; }
/// <summary> /// Update the cron trigger data. /// </summary> /// <param name="conn">The DB Connection.</param> /// <param name="trigger">The trigger to insert.</param> /// <returns>The number of rows updated.</returns> public virtual int UpdateCronTrigger(ConnectionAndTransactionHolder conn, CronTrigger trigger) { using (IDbCommand cmd = PrepareCommand(conn, ReplaceTablePrefix(SqlUpdateCronTrigger))) { AddCommandParameter(cmd, 1, "triggerCronExpression", trigger.CronExpressionString); AddCommandParameter(cmd, 2, "triggerName", trigger.Name); AddCommandParameter(cmd, 3, "triggerGroup", trigger.Group); return cmd.ExecuteNonQuery(); } }
public void ShouldSetLocalTimezoneOnCronTriggerWhenCalledScheduleTrigger() { // Arrange var myTrigger = new CronTrigger { Name = "TestTrigger", Group = "TestGroup", JobName = "TestJobName", JobGroup = "TestJobGroup", CronExpression = "0/30 * * * * ?" }; IJobDetail noOpJob = new JobDetailImpl("TestJobName", "TestJobGroup", typeof(NoOpJob)); _mockScheduler.Setup(x => x.GetJobDetail(It.IsAny<JobKey>())).Returns(noOpJob); _mockScheduler.Setup(x => x.CheckExists(It.IsAny<JobKey>())).Returns(true); ISchedulerCore schedulerCore = new SchedulerCore(_mockScheduler.Object, _mockPersistanceStore.Object); // Act schedulerCore.ScheduleTrigger(myTrigger); // Assert _mockScheduler.Verify(x => x.ScheduleJob( It.Is<ICronTrigger>(t => (Equals(t.TimeZone, TimeZoneInfo.Local)))), Times.Once); }