Beispiel #1
0
        public static void Main(String[] args)
        {
            NameValueCollection properties = new NameValueCollection();
            properties["quartz.scheduler.instanceName"] = "JobStoreTest";
            properties["quartz.scheduler.instanceId"] = System.Environment.MachineName + DateTime.UtcNow.Ticks;
            properties["quartz.jobStore.type"] = "Quartz.Impl.MongoDB.JobStore, Quartz.Impl.MongoDB";
            IScheduler scheduler = new Quartz.Impl.StdSchedulerFactory(properties).GetScheduler();
            scheduler.Clear();

            // and start it off
            scheduler.Start();

            // define the job and tie it to our HelloJob class
            IJobDetail job = JobBuilder.Create<HelloJob>().WithIdentity("job1", "group1").Build();

            // Trigger the job to run now, and then repeat every 10 seconds
            ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()).Build();

            // Tell quartz to schedule the job using our trigger
            scheduler.ScheduleJob(job, trigger);

            // some sleep to show what's happening
            Thread.Sleep(TimeSpan.FromSeconds(10));

            // and last shut down the scheduler when you are ready to close your program
            scheduler.Shutdown();

            Console.ReadLine();
        }
Beispiel #2
0
        private void ScheduleJobs()
        {
            // construct a scheduler factory
            ISchedulerFactory schedFact = new Quartz.Impl.StdSchedulerFactory();

            // get a scheduler
            IScheduler sched = schedFact.GetScheduler();

            sched.Start();

            // define the job and tie it to our HelloJob class
            IJobDetail job = JobBuilder.Create <Jobs.PreventIdleJob>()
                             .WithIdentity("preventIdle", "preventIdleGroup")
                             .Build();

            // Trigger the job to run now, and then every 2 mins
            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity("triggerPreventIdle", "preventIdleGroup")
                               .StartNow()
                               .WithSimpleSchedule(x => x
                                                   .WithIntervalInMinutes(2)
                                                   .RepeatForever())
                               .Build();

            sched.ScheduleJob(job, trigger);
        }
Beispiel #3
0
        // starts the scheduler, defines the jobs and the triggers
        public static async Task Start(IServiceProvider container)
        {
            var schedulerFactory = new Quartz.Impl.StdSchedulerFactory();
            var _scheduler       = schedulerFactory.GetScheduler().Result;

            _scheduler.JobFactory = new JobFactory(container);
            await _scheduler.Start();

            var yourJob = JobBuilder.Create <YourJob>()
                          .Build();

            var yourJobTrigger = TriggerBuilder.Create()
                                 .StartNow()
                                 .WithSimpleSchedule(s => s
                                                     .WithIntervalInMinutes(2)
                                                     .RepeatForever())
                                 .Build();

            await _scheduler.ScheduleJob(yourJob, yourJobTrigger);

            //reward
            var rewardJob = JobBuilder.Create <RewardJob>()
                            .Build();

            var rewardJobTrigger = TriggerBuilder.Create()
                                   .StartNow()
                                   .WithSimpleSchedule(s => s
                                                       .WithIntervalInHours(24)
                                                       .RepeatForever())
                                   .Build();

            await _scheduler.ScheduleJob(rewardJob, rewardJobTrigger);
        }
Beispiel #4
0
        protected override void OnStart(string[] args)
        {
            Logger.Info("服务开始启动");
            #region job配置
            NameValueCollection properties = new NameValueCollection();
            // 远程输出配置
            properties["quartz.scheduler.exporter.type"]        = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
            properties["quartz.scheduler.exporter.port"]        = "666";
            properties["quartz.scheduler.exporter.bindName"]    = "QuartzScheduler";
            properties["quartz.scheduler.exporter.channelType"] = "tcp";
            properties["quartz.scheduler.instanceName"]         = "DataCenterInstance";

            // set thread pool info
            properties["quartz.threadPool.type"]           = "Quartz.Simpl.SimpleThreadPool, Quartz";
            properties["quartz.threadPool.threadCount"]    = "2";//单个任务所对应的线程,为1表示只有一个线程工作,这样避免多个线程改同一条数据
            properties["quartz.threadPool.threadPriority"] = "Normal";

            // job initialization plugin handles our xml reading, without it defaults are used
            properties["quartz.plugin.xml.type"]      = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz";
            properties["quartz.plugin.xml.fileNames"] = System.AppDomain.CurrentDomain.BaseDirectory + "quartz_jobs.xml";
            ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(properties);
            scheduler = sf.GetScheduler();
            scheduler.Start();
            #endregion
        }
Beispiel #5
0
        public CollectService()
        {
            var diContainer = new UnityContainer().CreateChildContainer();
            lock (ScheduleInitLock)
            {
                var scheduler = new Quartz.Impl.StdSchedulerFactory().GetScheduler();
                if (ScheduleController == null)
                {
                    SchedulerContainer = diContainer.CreateChildContainer();
                    scheduler.JobFactory = new UnityJobFactory(SchedulerContainer);
                    ScheduleController = new ScheduleController(scheduler);
                    ScheduleController.ReschedulingAlreadyExecuted = false;
                }

                diContainer.RegisterType<IDataProvider, DataProvider>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType<ICollectRequestRepository, CollectRequestRepository>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType<IProbeManager, ProbeManager>();
                diContainer.RegisterType<ICollectRequestAssembler, CollectRequestAssembler>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType<ICollectPackageAssembler, CollectPackageAssembler>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType<ICollectResultAssembler, CollectResultAssembler>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType<IDefinitionDocumentFactory, DefinitionDocumentFactory>(new ContainerControlledLifetimeManager());
                diContainer.RegisterInstance<IScheduler>(scheduler);
                diContainer.RegisterInstance<IScheduleController>(ScheduleController);

                CollectController = diContainer.Resolve<CollectController>();
            }
        }
Beispiel #6
0
        public QuartzSchedulingServer(
            ILoggerFactory loggerFactory,
            IServiceScopeFactory scopeFactory,
            ShellContext shellContext,
            IOptions <SchedulingOptions> schedulingOptions)
        {
            Guard.ArgumentNotNull(scopeFactory, nameof(scopeFactory));
            Guard.ArgumentNotNull(shellContext, nameof(shellContext));
            Guard.ArgumentNotNull(schedulingOptions, nameof(schedulingOptions));
            Guard.ArgumentNotNull(scopeFactory, nameof(scopeFactory));

            var schedulerFactory = new Quartz.Impl.StdSchedulerFactory();

            _scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult();

            _schedulingOptions = schedulingOptions;

            _loggerFactory = loggerFactory;

            var jobTypes = shellContext.Blueprint.Dependencies
                           .Where(d => typeof(IScheduledJob).GetTypeInfo().IsAssignableFrom(d.Type))
                           .Select(d => d.Type)
                           .Distinct().ToArray();

            _jobTypes = jobTypes.ToDictionary(t =>
            {
                var jobAttribute = t.GetAttribute <ConfiguredJobAttribute>();
                return((jobAttribute != null) ? jobAttribute.JobId : Guid.NewGuid().ToString("N"));
            },
                                              t => t);
        }
Beispiel #7
0
        public static void Main(String[] args)
        {
            NameValueCollection properties = new NameValueCollection();

            properties["quartz.scheduler.instanceName"] = "JobStoreTest";
            properties["quartz.scheduler.instanceId"]   = System.Environment.MachineName + DateTime.UtcNow.Ticks;
            properties["quartz.jobStore.type"]          = "Quartz.Impl.MongoDB.JobStore, Quartz.Impl.MongoDB";
            IScheduler scheduler = new Quartz.Impl.StdSchedulerFactory(properties).GetScheduler();

            scheduler.Clear();

            // and start it off
            scheduler.Start();

            // define the job and tie it to our HelloJob class
            IJobDetail job = JobBuilder.Create <HelloJob>().WithIdentity("job1", "group1").Build();

            // Trigger the job to run now, and then repeat every 10 seconds
            ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()).Build();

            // Tell quartz to schedule the job using our trigger
            scheduler.ScheduleJob(job, trigger);

            // some sleep to show what's happening
            Thread.Sleep(TimeSpan.FromSeconds(10));

            // and last shut down the scheduler when you are ready to close your program
            scheduler.Shutdown();

            Console.ReadLine();
        }
Beispiel #8
0
        public CollectService()
        {
            var diContainer = new UnityContainer().CreateChildContainer();

            lock (ScheduleInitLock)
            {
                var scheduler = new Quartz.Impl.StdSchedulerFactory().GetScheduler();
                if (ScheduleController == null)
                {
                    SchedulerContainer   = diContainer.CreateChildContainer();
                    scheduler.JobFactory = new UnityJobFactory(SchedulerContainer);
                    ScheduleController   = new ScheduleController(scheduler);
                    ScheduleController.ReschedulingAlreadyExecuted = false;
                }

                diContainer.RegisterType <IDataProvider, DataProvider>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType <ICollectRequestRepository, CollectRequestRepository>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType <IProbeManager, ProbeManager>();
                diContainer.RegisterType <ICollectRequestAssembler, CollectRequestAssembler>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType <ICollectPackageAssembler, CollectPackageAssembler>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType <ICollectResultAssembler, CollectResultAssembler>(new ContainerControlledLifetimeManager());
                diContainer.RegisterType <IDefinitionDocumentFactory, DefinitionDocumentFactory>(new ContainerControlledLifetimeManager());
                diContainer.RegisterInstance <IScheduler>(scheduler);
                diContainer.RegisterInstance <IScheduleController>(ScheduleController);

                CollectController = diContainer.Resolve <CollectController>();
            }
        }
        static IScheduler CreateScheduler(IComponentContext context)
        {
            ISchedulerFactory schedulerFactory = new StdSchedulerFactory();

            var scheduler = schedulerFactory.GetScheduler();

            return scheduler;
        }
Beispiel #10
0
        static IScheduler CreateScheduler(IComponentContext context)
        {
            ISchedulerFactory schedulerFactory = new StdSchedulerFactory();

            var scheduler = schedulerFactory.GetScheduler();

            return(scheduler);
        }
Beispiel #11
0
        static IScheduler CreateScheduler(IComponentContext context)
        {
            ISchedulerFactory schedulerFactory = new StdSchedulerFactory();

            var scheduler = TaskUtil.Await(() => schedulerFactory.GetScheduler());

            return(scheduler);
        }
Beispiel #12
0
        void Application_Start(object sender, EventArgs e)
        {
            //---------------------------初始化quartz---------------------------
            Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();
            sched = sf.GetScheduler();
            sched.Start();
            //------------------------------------------------------------------

            Logger.Info("web启动成功");
        }
Beispiel #13
0
        public TaskHandler()
        {
            _Logger = Common.Logging.LogManager.GetLogger(GetType());

            //依据配置文件获取需要调度任务
            var fact = new Quartz.Impl.StdSchedulerFactory();
            _Scheduler = fact.GetScheduler();

            //在此注册任务处理模块时间处理
            JobBaseHandler.OnExecute += JobBaseHandler_OnExecute;
        }
Beispiel #14
0
        protected override void OnStart(string[] args)
        {
            // TODO: 在此处添加代码以启动服务。
            Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();
            sched = sf.GetScheduler();

            string MyGroupName   = "PlatformJobGroup";
            string TrigGroupName = "PlatformTrigerGroup";

            //CommonFun.Instance.AddSchedule<JobSchedule>(ref sched, "DoImport", TrigGroupName, MyGroupName);
            CommonFun.Instance.AddSchedule <PayStatusNotifyJob>(ref sched, "DoImport", TrigGroupName, MyGroupName);
            sched.Start();
        }
Beispiel #15
0
        static async Task MainAsync()
        {
            var factory = new Quartz.Impl.StdSchedulerFactory();

            factory.Initialize();
            var scheduler = await factory.GetScheduler();

            // Create some jobs



            //var ceo_hpyJob =
            //   JobBuilder.Create<hpyJob>()
            //   .Build();
            //var ceo_mtJob =
            // JobBuilder.Create<mtJob>()
            // .Build();

            var ceo_bitJob =
                JobBuilder.Create <bitJob>()
                .Build();
            //  var ceo_eosJob =
            //JobBuilder.Create<eosJob>()
            //.Build();

            //     var ceo_oiocJob =
            //JobBuilder.Create<oiocJob>()
            //.Build();

            //var ceo_eacJob =
            //   JobBuilder.Create<eacJob>()
            //   .Build();

            // Schedule them to run


            //await scheduler.ScheduleJob(ceo_mtJob, CreateTrigger());
            await scheduler.ScheduleJob(ceo_bitJob, CreateTrigger());

            //await scheduler.ScheduleJob(ceo_oiocJob, CreateTrigger());
            //await scheduler.ScheduleJob(ceo_hpyJob, CreateTrigger());

            await scheduler.Start();

            Console.WriteLine("Scheduler started, press any key to quit");
            Console.ReadKey();

            // Stop running all jobs

            await scheduler.Shutdown();
        }
        protected override void OnStart(string[] args)
        {
            var f = new Quartz.Impl.StdSchedulerFactory();

            scheduler = f.GetScheduler();
            var job     = JobBuilder.Create <jj>().Build();
            var trigger = TriggerBuilder.Create().WithIdentity("daily")
                          .ForJob(job)
                          .WithSimpleSchedule(a => a.WithIntervalInSeconds(10))
                          //.WithDailyTimeIntervalSchedule(a=>{ a.StartingDailyAt(new TimeOfDay(0, 0)).WithIntervalInMinutes(1).WithRepeatCount(5); })
                          .Build();

            scheduler.ScheduleJob(trigger);
        }
        public void Initialize()
        {
            var schedulerFactory = new Quartz.Impl.StdSchedulerFactory();

            _schedular = schedulerFactory.GetScheduler();

            IJobDetail job = JobBuilder.Create <SendMailTaskTest>()
                             .WithIdentity("SendMailJob")
                             .Build();

            // 建立觸發器
            ITrigger trigger = TriggerBuilder.Create()
                               .WithCronSchedule("0 0/1 * * * ?")       // 每一分鐘觸發一次。
                               .WithIdentity("SendMailTrigger")
                               .Build();

            // 把工作加入排程
            _schedular.ScheduleJob(job, trigger);

            // 啟動排程器
            _schedular.Start();
        }
Beispiel #18
0
        /// <summary>
        /// Called by the <see cref="IScheduler"/> when a  <see cref="ITrigger"/> has fired, and it's
        /// associated <see cref="IJobDetail"/> is about to be executed. It is called after the
        /// TriggerFired(ITrigger, IJobExecutionContext) method of this interface.
        /// If the execution is vetoed (via returning true), the job's execute method will not be called.
        /// </summary>
        /// <param name="trigger">The trigger.</param>
        /// <param name="context">The context.</param>
        /// <returns></returns>
        public bool VetoJobExecution(ITrigger trigger, IJobExecutionContext context)
        {
            // get job type id
            int jobId = context.JobDetail.Description.AsInteger();

            // Check if other schedulers are running this job...
            // TODO NOTE: Someday we would want to see if this also can work across
            // multiple 'hosts' in a Rock cluster else we should handle this explicitly.
            var otherSchedulers = new Quartz.Impl.StdSchedulerFactory().AllSchedulers
                                  .Where(s => s.SchedulerName != context.Scheduler.SchedulerName);

            foreach (var scheduler in otherSchedulers)
            {
                if (scheduler.GetCurrentlyExecutingJobs().Where(j => j.JobDetail.Description == context.JobDetail.Description &&
                                                                j.JobDetail.ConcurrentExectionDisallowed).Any())
                {
                    System.Diagnostics.Debug.WriteLine(RockDateTime.Now.ToString() + $" VETOED! Scheduler '{scheduler.SchedulerName}' is already executing job Id '{context.JobDetail.Description}' (key: {context.JobDetail.Key})");
                    return(true);
                }
            }

            return(false);
        }
Beispiel #19
0
        }   // End Constructor

        public async System.Threading.Tasks.Task StartJobs(System.Threading.CancellationToken stoppingToken)
        {
            this._stopppingToken   = stoppingToken;
            this._schedulerFactory = new Quartz.Impl.StdSchedulerFactory();
            this._scheduler        = await this._schedulerFactory.GetScheduler();

            await this._scheduler.Start();

            Quartz.IJobDetail job1 = Quartz.JobBuilder.Create <Job1>()
                                     .WithIdentity("job1", "gtoup")
                                     .Build();

            Quartz.ITrigger trigger1 = Quartz.TriggerBuilder.Create()
                                       .WithIdentity("trigger_10_sec", "group")
                                       .StartNow()
                                       .WithSimpleSchedule(x => x
                                                           .WithIntervalInSeconds(10)
                                                           .RepeatForever())
                                       .Build();

            Quartz.IJobDetail job2 = Quartz.JobBuilder.Create <Job2>()
                                     .WithIdentity("job2", "group")
                                     .Build();

            Quartz.ITrigger trigger2 = Quartz.TriggerBuilder.Create()
                                       .WithIdentity("trigger_20_sec", "group")
                                       .StartNow()
                                       .WithSimpleSchedule(x => x
                                                           .WithIntervalInSeconds(20)
                                                           .RepeatForever())
                                       .Build();

            await this._scheduler.ScheduleJob(job1, trigger1, this._stopppingToken);

            await this._scheduler.ScheduleJob(job2, trigger2, this._stopppingToken);
        } // End Task StartJobs
Beispiel #20
0
        private IScheduler _schedular = null; // Quartz排程器

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            //## for Quarzt.NET
            // 建立排程器
            ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(QuartzConfig());

            _schedular = sf.GetScheduler();

            _schedular.Start(); // 啟動Quartz排程器

            #region Quarzt-建立工作與排程

            //# 建立固定排程工作1,原則上一個Job呼應一個Trigger。
            IJobDetail job1 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.MyQuartzJob>()
                              .WithIdentity("job1")
                              .Build();

            ITrigger trigger1 = TriggerBuilder.Create()
                                .WithIdentity("trigger1")
                                .WithCronSchedule("0/5 * * * * ?")      // 每5秒觸發一次。
                                .Build();

            _schedular.ScheduleJob(job1, trigger1);

            //# 建立固定排程工作2,原則上一個Job呼應一個Trigger。
            IJobDetail job2 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.SimpleJob>()
                              .WithIdentity("job2", "MyGroup")
                              .Build();

            ITrigger trigger2 = TriggerBuilder.Create()
                                .WithIdentity("trigger2", "MyGroup")
                                .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()) // 每間隔10秒執行一次,不斷重複。
                                .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))              // 5秒後開始執行
                                .EndAt(DateBuilder.FutureDate(2, IntervalUnit.Minute))                // 2分後停止執行
                                .Build();

            _schedular.ScheduleJob(job2, trigger2);

            //# 先只建立Job
            IJobDetail job3 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.TestRetryableJob>()
                              .WithIdentity("Job3")
                              .WithDescription("Hi. This is the Job3.")
                              .Build();

            _schedular.AddJob(job3, true, true);

            // 再建立trigger 與已存在的Job掛勾。多個 trigger 可與同一個 job 掛勾
            ITrigger trigger3 = TriggerBuilder.Create()
                                .ForJob("Job3")                                                         //
                                .WithIdentity("trigger3")
                                .WithSimpleSchedule(s => s.WithIntervalInSeconds(4).WithRepeatCount(2)) // 每隔4秒重複2次,也就是總共跑3次
                                .StartAt(DateBuilder.FutureDate(7, IntervalUnit.Second))                // 7秒後開始執行
                                .Build();

            ITrigger trigger4 = TriggerBuilder.Create()
                                .ForJob("Job3")
                                .WithIdentity("trigger4")
                                .StartAt(DateBuilder.DateOf(14, 6, 0))     // 於指定時間 14:06:00 執行,若時間已過將會立刻執行。將只會執行一次。
                                .Build();

            _schedular.ScheduleJob(trigger3);
            _schedular.ScheduleJob(trigger4);


            // 傳入參數給排程,Job 與 trigger 都給參數
            IJobDetail job5 = JobBuilder.Create <WebApp_QuartzLab.MyQuartz.TestArgumentsJob>()
                              .WithIdentity("job5", "MyGroup")
                              .UsingJobData("JobArg1", "aaaaa")           // 參數
                              .UsingJobData("JobArg2", "bbbbb")           // 同名參數-預設效果
                              .Build();

            ITrigger trigger5 = TriggerBuilder.Create()
                                .WithIdentity("trigger5", "MyGroup")
                                .StartAt(DateBuilder.FutureDate(6, IntervalUnit.Second)) // 5秒後開始執行
                                .UsingJobData("JobArg2", "xxxxx")                        // 同名參數-後來為主
                                .UsingJobData("JobArg3", "ccccc")
                                .Build();

            _schedular.ScheduleJob(job5, trigger5);

            // 傳入參數給排程 - 化簡程式碼
            _schedular.ScheduleJob(JobBuilder.Create <WebApp_QuartzLab.MyQuartz.TestArgumentsJob>()
                                   .Build()
                                   , TriggerBuilder.Create()
                                   .StartAt(DateBuilder.FutureDate(12, IntervalUnit.Second)) // 5秒後開始執行
                                   .UsingJobData("JobArg1", "AAA")                           // 參數
                                   .UsingJobData("JobArg2", "XXX")
                                   .UsingJobData("JobArg3", "CCC")
                                   .Build());

            #endregion
        }
Beispiel #21
0
        public void StartScheduler()
        {
            Quartz.Impl.StdSchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory();
            Quartz.IScheduler scheduler             = factory.GetScheduler();

            string myJobName   = "MyFirstJob";
            string myGroupName = "MyGroup";

            string[] jobNames = scheduler.GetJobNames(myGroupName);

            if (!jobNames.Contains(myJobName))
            {
                Quartz.JobDetail job = new Quartz.JobDetail(myJobName, myGroupName, typeof(ConsoleJob1));
                job.JobDataMap.Add("ExtraText", "Plinko");
                Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(2);
                trigger.Name  = "myFirstTrigger";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("HelloWorld1"))
            {
                Quartz.JobDetail job     = new Quartz.JobDetail("HelloWorld1", myGroupName, typeof(Quartz.Job.NoOpJob));
                Quartz.Trigger   trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(15);
                trigger.Name  = "HelloWorld1Trigger";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("HelloWorld2"))
            {
                Quartz.Impl.Calendar.HolidayCalendar calendar = new Quartz.Impl.Calendar.HolidayCalendar();
                calendar.AddExcludedDate(DateTime.Now.ToUniversalTime());
                calendar.AddExcludedDate(DateTime.Now.AddDays(4).ToUniversalTime());
                scheduler.AddCalendar("randomHolidays", calendar, true, true);

                Quartz.JobDetail job = new Quartz.JobDetail("HelloWorld2", myGroupName, typeof(Quartz.Job.NoOpJob));


                Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(15, 00);
                trigger.Name         = "HelloWorld2Trigger";
                trigger.Group        = myGroupName;
                trigger.CalendarName = "randomHolidays";


                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("TimeTrackerReminder"))
            {
                Quartz.JobDetail job     = new Quartz.JobDetail("TimeTrackerReminder", myGroupName, typeof(Quartz.Job.NoOpJob));
                Quartz.Trigger   trigger = Quartz.TriggerUtils.MakeWeeklyTrigger(DayOfWeek.Monday, 8, 0);
                trigger.Name  = "EveryMondayAtEight";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("UnscheduledJob"))
            {
                Quartz.JobDetail job = new Quartz.JobDetail("UnscheduledJob", myGroupName, typeof(Quartz.Job.NoOpJob));
                scheduler.AddJob(job, true);
            }

            if (!jobNames.Contains("TwoAliens"))
            {
                Quartz.JobDetail job     = new Quartz.JobDetail("TwoAliens", myGroupName, typeof(TwoAlienJob));
                Quartz.Trigger   trigger = Quartz.TriggerUtils.MakeMonthlyTrigger(28, 23, 59);
                trigger.Name  = "EveryFullMoon";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }


            scheduler.Start();
        }
Beispiel #22
0
 private QuartzWrapper()
 {
     var schedulerFact = new Quartz.Impl.StdSchedulerFactory();
     _scheduler = schedulerFact.GetScheduler();
     _scheduler.Start();
 }
Beispiel #23
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            //資料回覆為Json格式
            GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

            //Quartz Log與Nlog綁定
            Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter {
                Level = Common.Logging.LogLevel.Info
            };

            NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger();
            _logger.Log(NLog.LogLevel.Info, "C10Mvc Application_Start()");

            //建立以Ram為儲存體的排程器
            ISchedulerFactory schedulerFactory = new Quartz.Impl.StdSchedulerFactory();
            IScheduler        _Scheduler       = schedulerFactory.GetScheduler();
            //WithCronSchedule:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontriggers.html


            //==更新個股基本資料
            // 建立工作
            IJobDetail jobStockInfo = JobBuilder.Create <StockInfoTask>()
                                      .WithIdentity("jobStockInfo")
                                      .Build();
            // 建立觸發器
            ITrigger triggerStockInfo = TriggerBuilder.Create()
                                        .WithCronSchedule("0 10 3 * * ?") // 每天0310
                                        .WithIdentity("triggerStockInfo")
                                        .Build();

            //==取得三大法人資料
            // 建立工作
            IJobDetail jobStockThreeTrade = JobBuilder.Create <StockThreeTradeTask>()
                                            .WithIdentity("jobStockThreeTrade")
                                            .Build();
            // 建立觸發器
            ITrigger triggerStockThreeTrade = TriggerBuilder.Create()
                                              .WithCronSchedule("0 5/30 16-17 * * ?") // 每天1605-1705,每三十分鐘一次
                                                                                      //.WithCronSchedule("0/3 * * * * ?")  // 每三秒觸發一次。
                                              .WithIdentity("triggerStockThreeTrade")
                                              .Build();

            //==盤後,巨量換手
            // 建立工作
            IJobDetail jobStockAfter = JobBuilder.Create <StockAfterTask>()
                                       .WithIdentity("jobStockAfter")
                                       .Build();
            // 建立觸發器
            ITrigger triggerStockAfter = TriggerBuilder.Create()
                                         .WithCronSchedule("0 11/30 15-17 * * ?") // 每天1511-1711,每三十分鐘一次
                                                                                  //.WithCronSchedule("0/3 * * * * ?")  // 每三秒觸發一次。
                                         .WithIdentity("triggerStockAfter")
                                         .Build();

            //==券商買賣證券日報表查詢系統(暫停使用,因為無法驗證google grecaptcha)
            //// 建立工作
            //IJobDetail jobStockBrokerBS = JobBuilder.Create<StockBrokerBSTask>()
            //                    .WithIdentity("jobStockBrokerBS")
            //                    .Build();
            //// 建立觸發器
            //ITrigger triggerStockBrokerBS = TriggerBuilder.Create()
            //                        .WithCronSchedule("0 5 16,18 * * ?")  // 每天16:05 18:05執行
            //                                                              //.WithCronSchedule("0/3 * * * * ?")  // 每三秒觸發一次。
            //                        .WithIdentity("triggerStockBrokerBS")
            //                        .Build();

            //==當沖資料
            // 建立工作
            IJobDetail jobStockAfterRush = JobBuilder.Create <StockAfterRushTask>()
                                           .WithIdentity("jobStockAfterRush")
                                           .Build();
            // 建立觸發器
            ITrigger triggerStockAfterRush = TriggerBuilder.Create()
                                             .WithCronSchedule("0 0/30 16-23 * * ?") // 每天16-23時,每30分鐘 執行
                                             .WithIdentity("triggerStockAfterRush")
                                             .Build();



            // 把工作加入排程
            _Scheduler.ScheduleJob(jobStockInfo, triggerStockInfo);
            _Scheduler.ScheduleJob(jobStockThreeTrade, triggerStockThreeTrade);
            _Scheduler.ScheduleJob(jobStockAfter, triggerStockAfter);
            //(暫停使用,因為無法驗證google grecaptcha)
            //_Scheduler.ScheduleJob(jobStockBrokerBS, triggerStockBrokerBS);
            _Scheduler.ScheduleJob(jobStockAfterRush, triggerStockAfterRush);

            // 啟動排程器
            _Scheduler.Start();


            //===========================================
            //JobBuilder.Create<SendMailTask>().
            //IJobDetail job = JobBuilder.Create().WithIdentity("test").Build();

            //ITrigger tt = TriggerBuilder.Create()
            //  .WithCronSchedule("")
            //  .WithIdentity("")
            //  .Build();

            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
            //    .WithSimpleSchedule(a => a.WithIntervalInSeconds(1).WithRepeatCount(10))
            //    .Build();

            //_Scheduler.ScheduleJob(job, trigger);

            //_Scheduler.Start();

            //=====================================
            ////1.0創建調度工廠
            //ISchedulerFactory factory = new StdSchedulerFactory();
            ////2.0通過工廠獲取調度器實例
            //IScheduler scheduler = factory.GetScheduler();
            ////3.0通過JobBuilder構建Job
            //IJobDetail job = JobBuilder.Create<JobGetNowTime>().Build();
            ////4.0通過TriggerBuilder構建Trigger
            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
            //    .WithSimpleSchedule(a => a.WithIntervalInSeconds(1).WithRepeatCount(10))
            //    .Build();
            ////5.0組裝各個組件<Job,Trigger>
            //scheduler.ScheduleJob(job, trigger);
            ////6.0啟動
            //scheduler.Start();
            //Thread.Sleep(10000);
            ////7.0銷毀內置的Job和Trigger
            //scheduler.Shutdown(true);
            //Console.ReadKey();
        }
        /// <summary>
        /// 定时任务开始
        /// </summary>
        /// <param name="logBuilder"></param>
        public static void StartJob()
        {
            Logger.Info("定时任务读取开始");
            ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();

            ServiceHelper._sched = sf.GetScheduler();
            int jobCounter     = 0;
            var currentService = ServiceHelper.CurrentWinService;

            if (currentService == null)
            {
                Logger.Error(null, $"找不到【{ServiceHelper.CurrentServiceName}】的配置");
                return;
            }
            foreach (var quartzJob in currentService.QuartzJob.JobItemList)
            {
                //配置检查
                if (string.IsNullOrWhiteSpace(quartzJob.JobKey) || string.IsNullOrWhiteSpace(quartzJob.Assembly) || string.IsNullOrWhiteSpace(quartzJob.QuartzCron))
                {
                    Logger.Error(null, $"QuartzJob.JobItem的JobKey,Assembly和QuartzCron不能为空. JobKey:{quartzJob.JobKey}, Assembly:{quartzJob.Assembly}, QuartzCron:{quartzJob.QuartzCron}");
                    continue;
                }

                //二选一
                if (string.IsNullOrWhiteSpace(quartzJob.ClassName) && string.IsNullOrWhiteSpace(quartzJob.MethodName))
                {
                    Logger.Error(null, $"QuartzJob.JobItem的JobKey={quartzJob.JobKey}的ClassName或MethodName不能为空. ClassName:{quartzJob.ClassName}, MethodName:{quartzJob.MethodName}");
                    continue;
                }

                try
                {
                    //如果执行方法不为空,则认为是没有继承Quartz.IJob
                    if (!string.IsNullOrEmpty(quartzJob.MethodName))
                    {
                        //如果执行的方法名不为空
                        var iIndex = quartzJob.MethodName.LastIndexOf(".");
                        quartzJob.ClassName  = quartzJob.MethodName.Substring(0, iIndex);  //将方法名给到类名
                        quartzJob.MethodName = quartzJob.MethodName.Substring(iIndex + 1); //留下方法名
                    }

                    Assembly assembly = ServiceHelper.GetAssembly(quartzJob.Assembly);
                    var      job      = assembly.CreateInstance(quartzJob.ClassName, false);

                    if (currentService.QuartzJob.JobItemList.Where(p => p.JobKey == quartzJob.JobKey).Count() > 1)
                    {
                        throw new Exception($"【{quartzJob.JobKey}】出现重复的JobKey");
                    }

                    #region 指定执行方法的处理与验证

                    if (!string.IsNullOrEmpty(quartzJob.MethodName))
                    {
                        //如果MethodName不为空,则启动本系统定时任务执行MethodName
                        if (job == null)
                        {
                            throw new Exception($"未能实例化对象:{quartzJob.ClassName}");
                        }
                        Type type       = job.GetType();
                        var  methodInfo = type.GetMethod(quartzJob.MethodName);
                        if (methodInfo == null)
                        {
                            throw new Exception($"不存在方法名:{quartzJob.ClassName}.{quartzJob.MethodName}");
                        }
                        object[] arrParam = null;
                        if (!string.IsNullOrEmpty(quartzJob.Parameters))
                        {
                            var arr = quartzJob.Parameters.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                            if (arr.Length > 0)
                            {
                                arrParam = arr.ToArray();
                            }
                        }
                        CommonJob.AddJob(quartzJob.JobKey, job, methodInfo, arrParam);

                        //完成后,实例化成CommonJob
                        job = new CommonJob();
                    }
                    else
                    {
                        //否则,校验ClassName是否继承了IJob
                        if (!(job is IJob))
                        {
                            throw new Exception(string.Format("{0},没有继承Quartz.IJob", quartzJob.ClassName));
                        }
                    }

                    #endregion

                    //加载Job
                    var jobKey    = new JobKey(quartzJob.JobKey, ServiceHelper.TriggerGrouopName);
                    var jobDetail = JobBuilder.Create(job.GetType()).UsingJobData("Parameters", quartzJob.Parameters).WithIdentity(jobKey).Build();
                    var jobTrig   = new CronTriggerImpl(quartzJob.JobKey + "Trigger", ServiceHelper.TriggerGrouopName, quartzJob.QuartzCron);
                    ServiceHelper._sched.ScheduleJob(jobDetail, jobTrig);
                    jobCounter++;

                    //添加适配器(可以利用适配器添加监听器)
                    var matcher = KeyMatcher <JobKey> .KeyEquals(jobDetail.Key);

                    matcherList.Add(matcher);
                    Logger.Info($"读取成功. JobKey:{quartzJob.JobKey}");
                }
                catch (Exception ex)
                {
                    string msg = $"读取失败. JobKey:{quartzJob.JobKey}";
                    Logger.Error(ex, msg);
                    throw ex;
                }
            }
            Logger.Info("定时任务读取完成");
            if (jobCounter > 0)
            {
                ServiceHelper._sched.Start();
            }
        }
        public void StartScheduler()
        {
            Quartz.Impl.StdSchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory();
            Quartz.IScheduler scheduler = factory.GetScheduler();

            string myJobName = "MyFirstJob";
            string myGroupName="MyGroup";
            string[] jobNames = scheduler.GetJobNames(myGroupName);

            if (!jobNames.Contains(myJobName))
            {
                Quartz.JobDetail job = new Quartz.JobDetail(myJobName, myGroupName, typeof(ConsoleJob1));
                job.JobDataMap.Add("ExtraText", "Plinko");
                Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(2);
                trigger.Name = "myFirstTrigger";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("HelloWorld1"))
            {
                Quartz.JobDetail job = new Quartz.JobDetail("HelloWorld1", myGroupName, typeof(Quartz.Job.NoOpJob));
                Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMinutelyTrigger(15);
                trigger.Name = "HelloWorld1Trigger";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("HelloWorld2"))
            {
                Quartz.Impl.Calendar.HolidayCalendar calendar = new Quartz.Impl.Calendar.HolidayCalendar();
                calendar.AddExcludedDate(DateTime.Now.ToUniversalTime());
                calendar.AddExcludedDate(DateTime.Now.AddDays(4).ToUniversalTime());
                scheduler.AddCalendar("randomHolidays", calendar, true, true);

                Quartz.JobDetail job = new Quartz.JobDetail("HelloWorld2", myGroupName, typeof(Quartz.Job.NoOpJob));
                

                Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(15, 00);
                trigger.Name = "HelloWorld2Trigger";
                trigger.Group = myGroupName;
                trigger.CalendarName = "randomHolidays";
                

                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("TimeTrackerReminder"))
            {
                Quartz.JobDetail job = new Quartz.JobDetail("TimeTrackerReminder", myGroupName, typeof(Quartz.Job.NoOpJob));
                Quartz.Trigger trigger = Quartz.TriggerUtils.MakeWeeklyTrigger(DayOfWeek.Monday, 8, 0);
                trigger.Name = "EveryMondayAtEight";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }

            if (!jobNames.Contains("UnscheduledJob"))
            {
                Quartz.JobDetail job = new Quartz.JobDetail("UnscheduledJob", myGroupName, typeof(Quartz.Job.NoOpJob));
                scheduler.AddJob(job, true);
            }

            if (!jobNames.Contains("TwoAliens"))
            {
                Quartz.JobDetail job = new Quartz.JobDetail("TwoAliens", myGroupName, typeof(TwoAlienJob));
                Quartz.Trigger trigger = Quartz.TriggerUtils.MakeMonthlyTrigger(28, 23, 59);
                trigger.Name = "EveryFullMoon";
                trigger.Group = myGroupName;

                scheduler.ScheduleJob(job, trigger);
            }


            scheduler.Start();

        }