Example #1
0
        static void Main()
        {
            try
            {
                if (log.IsDebugEnabled) log.Debug("Apache log4net successfully initialized.");

                var jobDetail = new JobDetail("SampleJob", "SampleJobGroup", typeof(CronJob));
                var cronTrigger = new CronTrigger("SampleTrigger", "SampleTriggerGroup", "0/4 * * * * ? *");
                var schedulerFactory = new StdSchedulerFactory();
                var scheduler = schedulerFactory.GetScheduler();
                    scheduler.ScheduleJob(jobDetail, cronTrigger);
                    scheduler.Start();
                var msg = String.Format("Starting Quartz.NET cron job ({0})", cronTrigger.CronExpressionString);

                if (!log.IsInfoEnabled) Console.WriteLine(msg);
                log.Info(msg);
            }
            catch (SchedulerException err)
            {
                var msg = String.Format("Quartz.NET Scheduler error: {0}", err.Message);

                if (!log.IsErrorEnabled) Console.WriteLine(msg);
                log.Error(msg);

                Console.WriteLine("Press any key to continue . . .");
                Console.ReadKey(true);
            }
        }
Example #2
0
        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 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);
            }
        }
        /// <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);
        }
        protected void Application_Start(object sender, EventArgs e)
        {
            // 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();

            // This tells the QuartzNetWebConsole what scheduler to use
            Setup.Scheduler = () => scheduler;

            // This adds an logger to the QuartzNetWebConsole. It's optional.
            var partialQuartzConsoleUrl = string.Format("http://{0}:{1}/quartz/", Context.Request.Url.Host, Context.Request.Url.Port);
            Setup.Logger = new MemoryLogger(1000, partialQuartzConsoleUrl);

            // I'll add some global listeners
            scheduler.AddGlobalJobListener(new GlobalJobListener());
            scheduler.AddGlobalTriggerListener(new GlobalTriggerListener());

            // A sample trigger and job
            var trigger = TriggerUtils.MakeSecondlyTrigger(6);
            trigger.StartTimeUtc = DateTime.UtcNow;
            trigger.Name = "myTrigger";
            scheduler.ScheduleJob(new JobDetail("myJob", null, typeof(HelloJob)), trigger);

            // A cron trigger and job
            var cron = new CronTrigger("myCronTrigger") {
                CronExpression = new CronExpression("0/10 * * * * ?"), // every 10 seconds
                JobName = "myJob",
            };
            scheduler.ScheduleJob(cron);

            // A dummy calendar
            scheduler.AddCalendar("myCalendar", new DummyCalendar {Description = "dummy calendar"}, false, false);
        }
        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();
            }
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        static void Main(string[] args)
        {
            Console.WriteLine("Starting scheduler...");

            var properties = new NameValueCollection();
            properties["quartz.scheduler.instanceName"] = "RemoteServerTestScheduler";

            // set thread pool infoD:\Projects\QuartzMaster\QuartzMaster.TestServerHost\Program.cs
            properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
            properties["quartz.threadPool.threadCount"] = "5";
            properties["quartz.threadPool.threadPriority"] = "Normal";

            // set remoting expoter
            properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
            properties["quartz.scheduler.exporter.port"] = "500";
            properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
            properties["quartz.scheduler.exporter.channelType"] = "tcp";

            var schedulerFactory = new StdSchedulerFactory(properties);
            scheduler = schedulerFactory.GetScheduler();

            // define the job and ask it to run
            var map = new JobDataMap();
            map.Put("msg", "Some message!");
            map.Put("msg 2", "Some message 2!");
            map.Put("msg 3", "Some message 3!");

            var job = new JobDetail("localJob", "default", typeof(NoOpJob))
            {
                JobDataMap = map
            };

            var job2 = new JobDetail("localJob 2", "default", typeof(NoOpJob))
            {
                JobDataMap = map
            };

            var trigger2 = new SimpleTrigger("Simple Trigger", "default", "localJob 2", "default", DateTime.Now, DateTime.Now.AddMinutes(10), SimpleTrigger.RepeatIndefinitely, new TimeSpan(0, 0, 45));

            var trigger = new CronTrigger("remotelyAddedTrigger", "default", "localJob", "default", DateTime.UtcNow, null, "/5 * * ? * *");

            var trigger3 = new SimpleTrigger("remotelyAddedTriggerB", "default", "localJob", "default", DateTime.Now, DateTime.Now.AddMinutes(10), SimpleTrigger.RepeatIndefinitely, new TimeSpan(0, 0, 45));

            // schedule the job
            scheduler.ScheduleJob(job, trigger3);
            scheduler.ScheduleJob(job2, trigger2);

            scheduler.Start();

            Console.WriteLine("Scheduler has been started.");
            Console.WriteLine("Press any key to stop scheduler");
            Console.ReadKey();
            scheduler.Shutdown();
        }
Example #10
0
        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;
        }
Example #11
0
        public void Execute()
        {
            //Debugger.Launch();
            var schedulerFactory = new StdSchedulerFactory();
            scheduler = schedulerFactory.GetScheduler();
            scheduler.Start();

            var foundTypes = typeLoader.LoadTypes();
            foreach (var foundType in foundTypes)
            {
                if (foundType.Type.IsInterface)
                    continue;

                if (typeof(IIntervalDaemon).IsAssignableFrom(foundType.Type))
                {

                    var intervalDaemon = (IIntervalDaemon)Activator.CreateInstance(foundType.Type);

                    for (var i = 1; i <= intervalDaemon.NumberOfInstances; i++)
                    {
                        var jobName = intervalDaemon.Name + "_" + i;
                        var jobDetail = new JobDetail(jobName, null, intervalDaemon.Job.GetType());
                        var trigger = TriggerUtils.MakeSecondlyTrigger(intervalDaemon.interval);
                        trigger.StartTimeUtc = DateTime.UtcNow;
                        trigger.Name = jobName + "Trigger";
                        trigger.JobDataMap.Add("configuration", foundType.Configuration);
                        scheduler.ScheduleJob(jobDetail, trigger);
                    }
                }

                if (typeof(IScheduledDaemon).IsAssignableFrom(foundType.Type))
                {
                    var scheduledDaemon = (IScheduledDaemon)Activator.CreateInstance(foundType.Type);
                    var jobDetail = new JobDetail(scheduledDaemon.Name, null, scheduledDaemon.Job.GetType());
                    foreach (var cronString in scheduledDaemon.CronStrings)
                    {
                        var trigger = new CronTrigger();
                        trigger.CronExpressionString = cronString;
                        trigger.StartTimeUtc = DateTime.UtcNow;
                        trigger.Name = scheduledDaemon.Name + "Trigger";
                        trigger.JobDataMap.Add("configuration", foundType.Configuration);
                        scheduler.ScheduleJob(jobDetail, trigger);
                    }

                }
            }
        }
        /// <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);
        }
Example #13
0
        static void Main(string[] args)
        {
            var properties = new NameValueCollection();
            properties["quartz.threadPool.threadCount"] = "1";
            
            const string cronExpression = "0/30 * * * * ?";

            var scheduler = new StdSchedulerFactory(properties).GetScheduler();
            
            var job = new JobDetail("NomeJob", "GrupoJob", typeof(BillingJob));

            var trigger = new CronTrigger("NomeTrigger", "GrupoTrigger", "NomeJob", "GrupoJob", cronExpression);

            scheduler.ScheduleJob(job, trigger);

            scheduler.Start();

            Console.ReadKey();

            scheduler.Shutdown();
        }
Example #14
0
        static void Main(string[] args)
        {
            Console.WriteLine("Starting scheduler...");

            var properties = new NameValueCollection();
            properties["quartz.scheduler.instanceName"] = "RemoteServerSchedulerClient";

            // 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.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
            properties["quartz.scheduler.exporter.port"] = "555";
            properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
            properties["quartz.scheduler.exporter.channelType"] = "tcp";

            var schedulerFactory = new StdSchedulerFactory(properties);
            var scheduler = schedulerFactory.GetScheduler();

            // define the job and ask it to run
            var map = new JobDataMap();
            map.Put("msg", "Some message!");

            var job = new JobDetail("localJob", "default", typeof(NoOpJob))
                          {
                              JobDataMap = map
                          };

            var trigger = new CronTrigger("remotelyAddedTrigger", "default", "localJob", "default", DateTime.UtcNow, null, "/5 * * ? * *");

            // schedule the job
            scheduler.ScheduleJob(job, trigger);

            scheduler.Start();

            Console.WriteLine("Scheduler has been started.");
        }
Example #15
0
        public bool Add(string taskid, NodeTaskRuntimeInfo nodetask)
        {
            lock (lock_task)
            {
                if (!TaskRuntimePool.ContainsKey(taskid))
                {
                    LogHelper.WriteInfo("加载taskJob");
                    JobDetail job1 = new JobDetail(taskid, nodetask.TaskModel.CategoryId.ToString(), typeof(TaskJob));

                    CronTrigger triger = new CronTrigger(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString());
                    //triger.CronExpressionString = "0/10 * * * * ?";
                    triger.CronExpressionString = nodetask.TaskModel.TaskCron;
                    //Trigger triger1 = TriggerFactory.Create(nodetask);
                    LogHelper.WriteInfo("TaskCron:" + nodetask.TaskModel.TaskCron);
                    _ische.ScheduleJob(job1, triger);
                    TaskRuntimePool.Add(taskid, nodetask);
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
 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;
     }
 }
Example #17
0
        public MonitorService()
        {
            this.ServiceName = "Sharp Monitoring Service";

            // create the job to be scheduled
            Type jobType = typeof(DailyTask);
            JobDetail job = new JobDetail(jobType.Name, null, jobType);

            ISchedulerFactory schedFact = new StdSchedulerFactory();
            sched = schedFact.GetScheduler();
            sched.Start();

            // schedule daily cron job
            Trigger trigger = new CronTrigger("CronTrigger", null, jobType.Name, null, SharpMonitor.Properties.Settings.Default.CornExpression);
            sched.AddJob(job, true);

            DateTime ft = sched.ScheduleJob(trigger);

            // start job immediately if next schedule job is tomorrow
            if (ft > DateTime.UtcNow)
            {
                sched.TriggerJob(jobType.Name, null);
            }
        }
        /// <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>
		/// 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>
        /// Schedules the clean up job.
        /// </summary>
        /// <param name="job">The clean up job.</param>
        /// <param name="cronExpression">The CRON expression.</param>
        /// <exception cref="FormatException">
        /// The <paramref name="cronExpression"/> is invalid.
        /// </exception>
        private static void ScheduleCleanUpJob(JobDetail job, string cronExpression)
        {
            var trigger = Scheduler.GetTriggersOfJob(job.Name, job.Group).FirstOrDefault(t => t.Name == CleanUpTriggerName && t.Group == CleanUpGroupName);
            if (trigger != null && !IsCronTrigger(trigger, cronExpression, TimeZoneInfo.Local))
            {
                Scheduler.UnscheduleJob(trigger.Name, CleanUpGroupName);
                trigger = null;
            }

            if (trigger != null || string.IsNullOrEmpty(cronExpression))
                return;

            trigger = new CronTrigger(
                CleanUpTriggerName,
                CleanUpGroupName,
                CleanUpJobName,
                CleanUpGroupName,
                cronExpression,
                TimeZoneInfo.Local);
            Scheduler.ScheduleJob(trigger);
        }
        /// <summary>
        /// Schedules the action manager job.
        /// </summary>
        /// <param name="job">
        /// The action manager job.
        /// </param>
        /// <param name="cronExpression">
        /// The CRON expression.
        /// </param>
        /// <exception cref="FormatException">
        /// The <paramref name="cronExpression"/> is invalid.
        /// </exception>
        private static void ScheduleActionManagerJob(JobDetail job, string cronExpression)
        {
            var trigger =
                Scheduler.GetTriggersOfJob(job.Name, job.Group).FirstOrDefault(t => t.Name == ActionManagerTriggerName && t.Group == ActionManagerGroupName);

            if (trigger != null && !IsCronTrigger(trigger, cronExpression, TimeZoneInfo.Local))
            {
                Scheduler.UnscheduleJob(trigger.Name, ActionManagerGroupName);
                trigger = null;
            }

            if (trigger == null && !string.IsNullOrEmpty(cronExpression))
            {
                trigger = new CronTrigger(
                    ActionManagerTriggerName,
                    ActionManagerGroupName,
                    ActionManagerJobName,
                    ActionManagerGroupName,
                    cronExpression,
                    TimeZoneInfo.Local);
                Scheduler.ScheduleJob(trigger);
            }
        }
Example #22
0
        static void Main(string[] args)
        {
            ISchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = factory.GetScheduler();
            scheduler.Start();

            JobDetail job = new JobDetail("firstJob", typeof(EmailManger));
            job.Durable = true;

            scheduler.AddJob(job, false);

            //Trigger trigger = TriggerUtils.MakeSecondlyTrigger(5);
            //trigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
            //trigger.Name = "EmailSender";

            //scheduler.ScheduleJob(job, trigger);

            CronTrigger ctrigger = new CronTrigger();
            //ctrigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
            //ctrigger.CronExpressionString = "0/6 * * * * ?";
            ctrigger.CronExpressionString = "0 0 2 ? * SUN";
            ctrigger.Name = "tt";
            ctrigger.Group = "default";
            ctrigger.JobName = "firstJob";

            //JobDetail job2 = new JobDetail("firstJob2", typeof(EmailManger));

            CronTrigger ctrigger2 = new CronTrigger();
            //ctrigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
            ctrigger2.CronExpressionString = "0/2 * * * * ?";
            ctrigger2.Name = "tt2";
            ctrigger2.Group = "default";
            ctrigger2.JobName = "firstJob";
            //ctrigger2.JobGroup = "";

            scheduler.ScheduleJob(ctrigger);
            //scheduler.ScheduleJob(ctrigger2);
            //scheduler.ScheduleJob(job2, ctrigger2);

            while (true)
            {
                string newJob = Console.ReadLine();
                if (newJob == "Y")
                {

                    CronTrigger oldTrigger=(scheduler.GetTrigger("tt", "default") as CronTrigger);
                    CronTrigger newTrigger = (CronTrigger)oldTrigger;
                    newTrigger.CronExpressionString = "0/5 * * * * ?";
                    //scheduler.ResumeTrigger("tt", "default");
                    scheduler.UnscheduleJob("tt", "default");
                    scheduler.ScheduleJob(newTrigger);
                    //scheduler.RescheduleJob("tt", "default", newTrigger);
                    scheduler.DeleteJob("firstJob", "default");

                    Console.WriteLine("修改了...");



                }
            }

            #region MyRegion

            //while(true)
            //{
            //    string newJob = Console.ReadLine();
            //    if(newJob=="Y")
            //    {
            //        JobDetail job2 = new JobDetail("firstJob2", typeof(EmailManger));

            //        Trigger trigger2 = TriggerUtils.MakeSecondlyTrigger(2);
            //        trigger2.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
            //        trigger2.Name = "EmailSender2";

            //        scheduler.ScheduleJob(job2, trigger2);
            //    }
            //}

            //-------------------
            //Trigger tr = TriggerUtils.MakeDailyTrigger(14, 41);
            //tr.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
            //tr.Name = "EmailSender" + DateTime.Now.ToString();

            //scheduler.ScheduleJob(job,tr);
            //scheduler.GetTrigger("","").
            #endregion

            //SchedulerFactoryObject sfactory = new SchedulerFactoryObject();

            //MethodInvokingJobDetailFactoryObject sjob = new MethodInvokingJobDetailFactoryObject();

            //CronTriggerObject

        }
        /// <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;
                                            ct.Priority = priority;
                                            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>
		/// 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;
		}
Example #25
0
        public void TestSchedulerFactoryObjectWithPlainQuartzObjects()
        {
            IJobFactory jobFactory = new AdaptableJobFactory();

            TestObject tb = new TestObject("tb", 99);
            JobDetail jobDetail0 = new JobDetail();
            jobDetail0.JobType = typeof (IJob);
            jobDetail0.Name = ("myJob0");
            jobDetail0.Group = (SchedulerConstants.DefaultGroup);
            jobDetail0.JobDataMap.Add("testObject", tb);
            Assert.AreEqual(tb, jobDetail0.JobDataMap.Get("testObject"));

            CronTrigger trigger0 = new CronTrigger();
            trigger0.Name = ("myTrigger0");
            trigger0.Group = SchedulerConstants.DefaultGroup;
            trigger0.JobName = "myJob0";
            trigger0.JobGroup = SchedulerConstants.DefaultGroup;
            trigger0.StartTimeUtc = (DateTime.UtcNow);
            trigger0.CronExpressionString = ("0/1 * * * * ?");

            TestMethodInvokingTask task1 = new TestMethodInvokingTask();
            MethodInvokingJobDetailFactoryObject mijdfb = new MethodInvokingJobDetailFactoryObject();
            mijdfb.Name = ("myJob1");
            mijdfb.Group = (SchedulerConstants.DefaultGroup);
            mijdfb.TargetObject = (task1);
            mijdfb.TargetMethod = ("doSomething");
            mijdfb.AfterPropertiesSet();
            JobDetail jobDetail1 = (JobDetail) mijdfb.GetObject();

            SimpleTrigger trigger1 = new SimpleTrigger();
            trigger1.Name = "myTrigger1";
            trigger1.Group = SchedulerConstants.DefaultGroup;
            trigger1.JobName = "myJob1";
            trigger1.JobGroup = SchedulerConstants.DefaultGroup;
            trigger1.StartTimeUtc = (DateTime.UtcNow);
            trigger1.RepeatCount = (SimpleTrigger.RepeatIndefinitely);
            trigger1.RepeatInterval = TimeSpan.FromMilliseconds(20);

            IScheduler scheduler = (IScheduler) mockery.CreateMock(typeof (IScheduler));
            Expect.Call(scheduler.JobFactory = (jobFactory));
            Expect.Call(scheduler.GetJobDetail("myJob0", SchedulerConstants.DefaultGroup)).Return(null);
            Expect.Call(scheduler.GetJobDetail("myJob1", SchedulerConstants.DefaultGroup)).Return(null);
            Expect.Call(scheduler.GetTrigger("myTrigger0", SchedulerConstants.DefaultGroup)).Return(null);
            Expect.Call(scheduler.GetTrigger("myTrigger1", SchedulerConstants.DefaultGroup)).Return(null);
            scheduler.AddJob(jobDetail0, true);
            LastCall.IgnoreArguments();
            scheduler.AddJob(jobDetail1, true);
            LastCall.IgnoreArguments();
            Expect.Call(scheduler.ScheduleJob(trigger0)).Return(DateTime.UtcNow);
            Expect.Call(scheduler.ScheduleJob(trigger1)).Return(DateTime.UtcNow);
            scheduler.Start();
            scheduler.Shutdown(false); 

            mockery.ReplayAll();

            SchedulerFactoryObject schedulerFactoryObject = new TestSchedulerFactoryObject(scheduler);

            schedulerFactoryObject.JobFactory = (jobFactory);
            schedulerFactoryObject.JobDetails = (new JobDetail[] {jobDetail0, jobDetail1});
            schedulerFactoryObject.Triggers = (new Trigger[] {trigger0, trigger1});
            try
            {
                schedulerFactoryObject.AfterPropertiesSet();
                schedulerFactoryObject.Start();
            }
            finally
            {
                schedulerFactoryObject.Dispose();
            }

            mockery.VerifyAll();
        }
Example #26
0
 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;
 }
        /// <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();
            }
        }