예제 #1
0
        public bool CheckExists(QuartzModel model)
        {
            IQuartzTask model1 = null;
            bool        bl     = this.Scheduler.CheckExists(model.JobDetail.Key);
            bool        b2     = this.QuartzTaskList.TryGetValue(model.JobName, out model1);

            return(bl && b2);
        }
예제 #2
0
        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public IQuartzTask UpdateJob(QuartzModel oldmodel, QuartzModel newModel)
        {
            IQuartzTask quartzTask = null;

            if (this.CheckExists(oldmodel))
            {
                //需要加QuartzTaskList
                if (this.RemoveJob(oldmodel))
                {
                    quartzTask = AddJob(newModel);
                }
            }
            return(quartzTask);
        }
예제 #3
0
        public bool RemoveJob(QuartzModel model)
        {
            IQuartzTask model1 = null;

            //if (this.CheckExists(model))
            //{
            //if (this.QuartzTaskList.TryRemove(model.JobName, out model1))
            //{

            //}
            if (this.CheckExists(model))
            {
                this.Scheduler.DeleteJob(model.JobDetail.Key);
            }
            return(this.QuartzTaskList.TryRemove(model.JobName, out model1));

            // }
        }
예제 #4
0
        public static void BootStrap()
        {
            ILog log    = log4net.LogManager.GetLogger("loginfo");
            ILog logerr = log4net.LogManager.GetLogger("logerror");

            var properties = new NameValueCollection();

            properties["quartz.jobStore.clustered"]   = "true";
            properties["quartz.scheduler.instanceId"] = "AUTO";
            //===持久化====
            // 存储类型
            properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
            //表明前缀
            properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
            //驱动类型
            properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
            //数据源名称
            properties["quartz.jobStore.dataSource"] = "myDS";
            //连接字符串
            properties["quartz.dataSource.myDS.connectionString"] = @"Data Source = SHOU-PC\SQLEXPRESS;Initial Catalog = JobScheduler;Integrated Security = SSPI;";
            //sqlserver版本
            properties["quartz.dataSource.myDS.provider"] = "SqlServer-20";

            QuartzFactory quartzFactory = new QuartzFactory(null);

            quartzFactory.Start();

            if (!HttpListener.IsSupported)
            {
                logerr.Error("必须2003以上系统才可以");
            }
            // 注意前缀必须以 / 正斜杠结尾
            string[]       prefixes = new string[] { Monitoring };
            IList <string> removed  = new List <string>();
            // 创建监听器.
            HttpListener listener = new HttpListener();

            listener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
            // 增加监听的前缀.
            foreach (string s in prefixes)
            {
                listener.Prefixes.Add(s);
            }

            try
            {
                listener.Start();
                log.Info("监听中..." + Monitoring);
                //可以改成iocp模型 以下监控可以放到factory moniter中 监控代码改成cmd模式,页面用velcity做,
                Thread thread31 = new Thread(() =>
                {
                    while (true)
                    {
                        // 注意: GetContext 方法将阻塞线程,直到请求到达
                        HttpListenerContext context = listener.GetContext();
                        // 取得请求对象
                        HttpListenerRequest request   = context.Request;
                        HttpListenerResponse response = context.Response;
                        //Console.WriteLine("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl);
                        log.Info(string.Format("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl));
                        if (request.RawUrl.Contains("stopjob"))
                        {
                            string name            = request.QueryString.Get("jobname");
                            var list               = quartzFactory.GetCurrentScheduer.QuartzTaskList;
                            IQuartzTask quartzTask = null;
                            if (list.TryGetValue(name, out quartzTask))
                            {
                                removed.Add(name);
                                quartzTask.StopJob();
                            }
                        }

                        else if (request.RawUrl.Contains("pausejob"))
                        {
                            string name            = request.QueryString.Get("jobname");
                            var list               = quartzFactory.GetCurrentScheduer.QuartzTaskList;
                            IQuartzTask quartzTask = null;
                            if (list.TryGetValue(name, out quartzTask))
                            {
                                quartzTask.Pause();
                            }
                        }
                        else if (request.RawUrl.Contains("resumejob"))
                        {
                            string name            = request.QueryString.Get("jobname");
                            var list               = quartzFactory.GetCurrentScheduer.QuartzTaskList;
                            IQuartzTask quartzTask = null;
                            if (list.TryGetValue(name, out quartzTask))
                            {
                                quartzTask.Resume();
                            }
                        }

                        else if (request.RawUrl.Contains("startjob"))
                        {
                            string name            = request.QueryString.Get("jobname");
                            var list               = quartzFactory.GetCurrentScheduer.QuartzTaskList;
                            IQuartzTask quartzTask = null;
                            if (!list.TryGetValue(name, out quartzTask))
                            {
                                removed.Remove(name);
                                quartzFactory.AddJob(name);
                            }
                        }
                        else if (request.RawUrl.Contains("stopservice"))
                        {
                            quartzFactory.GetCurrentScheduer.Stop();
                        }

                        else if (request.RawUrl.Contains("startservice"))
                        {
                            removed.Clear();
                            quartzFactory.Start();
                        }

                        var list1        = quartzFactory.GetCurrentScheduer.QuartzTaskList;
                        StringBuilder sb = new StringBuilder();
                        sb.AppendFormat("当前服务状态【{0}】", quartzFactory.GetCurrentScheduer.GetScheduleStatus.ToString());
                        sb.Append("<a href='" + Monitoring + "'>【刷新】</a>");
                        sb.Append("<a href='" + Monitoring + "stopservice'>【停止全部任务】</a>");
                        sb.Append("<a href='" + Monitoring + "startservice'>【启动全部任务】</a>");
                        sb.Append("</br>");
                        sb.Append("-------以下是正在执行的任务-------");
                        sb.Append("</br>");
                        foreach (var item in list1)
                        {
                            sb.AppendFormat("组名{0}:服务名{1}:当前状态【{2}】:下次执行时间{3}", item.Value.GroupName, item.Key, item.Value.JobStatus.ToString(), item.Value.GetNexeTime());
                            sb.AppendFormat("<a href='" + Monitoring + "pausejob?jobname={0}'>【暂停】</a>", item.Key);
                            sb.AppendFormat("<a href='" + Monitoring + "resumejob?jobname={0}'>【继续】</a>", item.Key);
                            sb.AppendFormat("<a href='" + Monitoring + "stopjob?jobname={0}'>【停止】</a>", item.Key);
                            sb.Append("</br>");
                        }
                        sb.Append("-------以下是已经停止的任务------");
                        sb.Append("</br>");
                        foreach (var it in removed)
                        {
                            sb.Append(it);
                            sb.AppendFormat("<a href='" + Monitoring + "startjob?jobname={0}'>【开始】</a>", it);
                            sb.Append("</br>");
                        }

                        sb.Append("-------以下是没有增加的任务------");
                        sb.Append("</br>");
                        var listsurplus = SurplusPlug(quartzFactory.GetPlugs(), list1.Keys.ToList(), removed);
                        foreach (var it in listsurplus)
                        {
                            sb.Append(it);
                            sb.AppendFormat("<a href='" + Monitoring + "startjob?jobname={0}'>【加载启动】</a>", it);
                            sb.Append("</br>");
                        }

                        string responseString    = @"<html> <head><title>From HttpListener Server</title></head> <body>" + sb.ToString() + "</body> </html>";
                        response.ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString);
                        response.ContentType     = "text/html; charset=UTF-8";
                        // 输出回应内容
                        System.IO.Stream output       = response.OutputStream;
                        System.IO.StreamWriter writer = new System.IO.StreamWriter(output);
                        writer.Write(responseString);
                        // 必须关闭输出流
                        writer.Close();
                    }
                });
                thread31.Start();
            }
            catch (Exception oe)
            {
                logerr.Error(oe.Message);
            }
        }