private IList <PlugModel> GetFileModel() { string runroot = AppDomain.CurrentDomain.BaseDirectory; var subDir = Directory.GetDirectories(runroot); IOConfigurationReader configurationReader = IOConfigurationReader.GetInstance(); IList <PlugModel> list = new List <PlugModel>(); foreach (var item in subDir) { string filename = new DirectoryInfo(item).Name; PlugModel model = new PlugModel(); string plugNamepath = Path.Combine(item, string.Concat(filename, "Plug.txt")); if (!File.Exists(plugNamepath)) { continue; } var plugdic = configurationReader.Read(plugNamepath); model.JobName = plugdic["JOBNAME"]; model.GroupName = plugdic["GROUPNAME"]; string CronexPression = string.Empty; if (plugdic.TryGetValue("CRONEXPRESSION", out CronexPression)) { model.CronexPression = CronexPression; } else { model.TimeSpan = int.Parse(plugdic["TIMESPAN"]); } model.DllRelativeDir = plugdic["JOBNAME"]; model.DllIQuartzServiceImplementFile = string.Concat(plugdic["JOBNAME"], "QuartzTask.dll"); list.Add(model); } return(list); }
/// <summary> /// 成功返回true ,false 失败有可能是已经存在或找不到jobname /// </summary> /// <param name="jobName"></param> /// <returns></returns> public IQuartzTask Add(string jobName) { if (this.QuartzSchedule == null || String.IsNullOrWhiteSpace(jobName)) { return(null); } string dllName = jobName + "QuartzTask.dll"; string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, jobName, dllName); string plugName = string.Concat(jobName, "Plug.txt"); string plugNamepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, jobName, plugName); var plugdic = configurationReader.Read(plugNamepath); byte[] assemblyBuf = File.ReadAllBytes(path); Assembly assembly = Assembly.Load(assemblyBuf); Type type = assembly.GetType(Path.GetFileNameWithoutExtension(dllName) + "." + jobName); if (type.GetInterface("IQuartzService") != null) { QuartzModel model = null; AssemblyDynamicLoader dyNamicLoader = new AssemblyDynamicLoader(jobName); dyNamicLoader.LoadAssembly(path); TaskBase task = new TaskBase(); IDictionary <string, object> dic = task.map; dic.Add("DyNamicLoader", dyNamicLoader); dic.Add("DyNamicMethod", Path.GetFileNameWithoutExtension(dllName) + "." + jobName); string timePression = ""; long timelongPression = 1000; bool bl = false; bl = plugdic.TryGetValue("CRONEXPRESSION", out timePression); if (!bl) { if (plugdic.TryGetValue("TIMESPAN", out timePression)) { if (!long.TryParse(timePression, out timelongPression)) { timePression = "1000"; } } } IJobDetail job = JobBuilder.Create(task.GetType()) .WithIdentity(plugdic["JOBNAME"], plugdic["GROUPNAME"]) .UsingJobData(new JobDataMap(dic)) .Build(); TriggerBuilder triggerBuilder = TriggerBuilder.Create() .WithIdentity(plugdic["JOBNAME"] + "TRIGGER", plugdic["GROUPNAME"]) .StartNow(); if (bl) { triggerBuilder.WithCronSchedule(timePression); } else { triggerBuilder.WithSimpleSchedule (x => x.WithInterval(new TimeSpan(timelongPression)) .RepeatForever()); } ITrigger trigger = triggerBuilder.Build(); model = new QuartzModel(plugdic["JOBNAME"], job, trigger); if (!this.QuartzSchedule.CheckExists(model)) { this.QuartzSchedule.AddJob(model); } } return(null); }