Example #1
0
        public QuartzSchedulerService()
        {
            var conStr = ConfigurationManager.ConnectionStrings["QUARTZNETJOBDB"]?.ConnectionString;

            try
            {
                NameValueCollection configuration = new NameValueCollection
                {
                    { "quartz.scheduler.instanceName", "LocalServer" },
                    { "quartz.scheduler.instanceId", "LocalServer" },
                    { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
                    //{ "quartz.jobStore.useProperties", "true" },
                    { "quartz.jobStore.dataSource", "default" },
                    { "quartz.jobStore.tablePrefix", "QRTZ_" },
                    { "quartz.dataSource.default.connectionString", conStr },
                    { "quartz.dataSource.default.provider", "SqlServer" },
                    //{ "quartz.threadPool.threadCount", "1" },
                    { "quartz.serializer.type", "binary" }
                };

                configuration["quartz.threadPool.type"]           = "Quartz.Simpl.SimpleThreadPool, Quartz";
                configuration["quartz.threadPool.threadCount"]    = "5";
                configuration["quartz.threadPool.threadPriority"] = "Normal";
                configuration["quartz.plugin.recentHistory.type"] = "Quartz.Plugins.RecentHistory.ExecutionHistoryPlugin, Quartz.Plugins.RecentHistory";

                configuration["quartz.plugin.recentHistory.storeType"] = "Quartz.Plugins.RecentHistory.Impl.InProcExecutionHistoryStore, Quartz.Plugins.RecentHistory";

                StdSchedulerFactory factory = new StdSchedulerFactory(configuration);
                scheduler = factory.GetScheduler().GetAwaiter().GetResult();

                _timer          = new Timer(30000);
                _timer.Elapsed += (sender, e) => {
                    try
                    {
                        if (scheduler.IsStarted == false || scheduler.IsShutdown)
                        {
                            this.StartScheduler();
                        }

                        #region FindErrorStateTriggers
                        using (SqlConnection connection = new SqlConnection(conStr))
                        {
                            var connectionOk = false;
                            try
                            {
                                connection.Open();

                                if (connection.State == System.Data.ConnectionState.Open)
                                {
                                    connectionOk = true;
                                }
                            }
                            catch (Exception sqlCon)
                            {
                                this.StopScheduler();
                            }

                            if (connectionOk)
                            {
                                var errorStateTriggers = TriggerManager.FindErrorStateTriggers(connection);
                                if (errorStateTriggers.Count > 0)
                                {
                                    foreach (var item in errorStateTriggers)
                                    {
                                        try
                                        {
                                            scheduler.ResumeTrigger(new TriggerKey(item.Key, item.Value));
                                        }
                                        catch (Exception trgErr)
                                        {
                                            LoggerService.GetLogger("LOGIJMS").Log(new LogItem()
                                            {
                                                LoggerName        = "LOGIJMS",
                                                Title             = "Scheduler ResumeTrigger Error",
                                                Message           = trgErr.Message,
                                                LogItemProperties = new List <LogItemProperty>()
                                                {
                                                    new LogItemProperty("ServiceName", "JOB"),
                                                    new LogItemProperty("AppName", "LogiJMS.TopshelfHost"),
                                                    new LogItemProperty("ActionName", "ResumeTrigger")
                                                },
                                                LogLevel  = LogLevel.Error,
                                                Exception = trgErr
                                            });
                                        }
                                    }
                                }
                            }
                        }
                        #endregion
                    }
                    catch (Exception expTmr)
                    {
                        LoggerService.GetLogger("LOGIJMS").Log(new LogItem()
                        {
                            LoggerName        = "LOGIJMS",
                            Title             = "Timer Exception",
                            Message           = expTmr.Message,
                            LogItemProperties = new List <LogItemProperty>()
                            {
                                new LogItemProperty("ServiceName", "JOB"),
                                new LogItemProperty("AppName", "LogiJMS.TopshelfHost"),
                                new LogItemProperty("ActionName", "Timer")
                            },
                            LogLevel  = LogLevel.Error,
                            Exception = expTmr
                        });
                    }
                };
            }
            catch (System.Exception ex)
            {
                LoggerService.GetLogger("LOGIJMS").Log(new LogItem()
                {
                    LoggerName        = "LOGIJMS",
                    Title             = "Scheduler Service Create",
                    Message           = "Scheduler Service Create",
                    LogItemProperties = new List <LogItemProperty>()
                    {
                        new LogItemProperty("ServiceName", "JOB"),
                        new LogItemProperty("AppName", "LogiJMS.TopshelfHost"),
                        new LogItemProperty("ActionName", "QuartzSchedulerService")
                    },
                    LogLevel  = LogLevel.Error,
                    Exception = ex
                });
            }
        }