1. 程式人生 > >Quartz.Net—基本操作

Quartz.Net—基本操作

meta .sh ets syn 暫停 splay object iou ops

Quratz基本架構

技術分享圖片

Scheduler基本操作
技術分享圖片
/// <summary>
/// 調度器信息
/// </summary>
/// <returns></returns>
public async Task<SchedulerMetaData> GetSchedulerI
{
    var mate = await schedu.GetMetaData();
    var json = JsonConvert.SerializeObject(mate);
    return mate;
}

/// <summary>
///
開始schedulequetzthread開始調度 /// </summary> /// <returns></returns> public async Task SchedulerStart() { if (!schedu.IsStarted) { await schedu.Start(); } } /// <summary> /// 關閉,關機。並清理關聯的資源。 /// </summary> /// <returns></returns> public async Task SchedulerShutdown() {
if (!schedu.IsShutdown) { await schedu.Shutdown(); } } /// <summary> /// 停止 /// </summary> /// <returns></returns> public async Task StopScheduler() { if (schedu.IsStarted) { await schedu.Standby(); } } /// <summary> /// 重啟 /// </summary> /// <returns></returns>
public async Task ResumScheduler() { if (schedu.InStandbyMode) { //Standby 靠邊站的, await schedu.Start(); } }
View Code

對大容器進行 暫停 重啟。整個調度都會停止的。

Job增刪查改
技術分享圖片
public async Task AddJob(string name, string group, string des, string dll, string typename)
{
    if (await schedu.CheckExists(new JobKey(name, group)))
    {

    }
    else
    {
        //先建立好一個job項目,然後只用創建一個實現了IJob接口的類庫。在把這個類庫添加到動態的添加到job項目中。
        var dllinstanck = Assembly.LoadFile(dll).CreateInstance(typename);
        IJobDetail job = JobBuilder.Create(dllinstanck.GetType()).WithIdentity(name, group).WithDescription(des).StoreDurably(true).Build();
        await schedu.AddJob(job, true);

    }
}

public async Task AddOrUpdateJob(string name, string group, string des, string dll, string typename)
{
    //StoreDurably  持久化存儲
    //該工作在孤兒之後是否應該繼續存儲(沒有觸發器就是孤兒)
    var dllinstanck = Assembly.LoadFile(dll).CreateInstance(typename);
    IJobDetail job = JobBuilder.Create(dllinstanck.GetType()).WithIdentity(name, group).WithDescription(des).StoreDurably(true).Build();
    await schedu.AddJob(job, true);


    //var jobde = await schedu.GetJobDetail(new JobKey(name, group));
    //jobde.GetJobBuilder().OfType().WithDescription("sdfsdf");

}
public async Task DelJob(string name, string group)
{
    await schedu.DeleteJob(new JobKey(name, group));
}
View Code
public async Task<IList<IJobDetail>> GetJobs()
{
    List<IJobDetail> joblist = new List<IJobDetail>();
    var keys = await schedu.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
    foreach (var item in keys)
    {
        var job =await schedu.GetJobDetail(item);
        joblist.Add(job);
    }
    return joblist;
}

技術分享圖片
/// <summary>
/// 停止job就是停止job關聯的trigger。
/// job是沒有狀態的。
/// 
/// 播放器 暫停 。在開始將 接著原來的。
/// 
/// </summary>
/// <param name="name"></param>
/// <param name="group"></param>
/// <returns></returns>
public async Task SchedulerPauseJob(string name, string group)
{
    await schedu.PauseJob(new JobKey(name, group));
}

/// <summary>
/// 恢復job 和 pause相對
/// </summary>
/// <param name="name"></param>
/// <param name="group"></param>
/// <returns></returns>
public async Task SchedulerResumeJob(string name, string group)
{
    await schedu.ResumeJob(new JobKey(name, group));
}
View Code

Trigger增刪查改
技術分享圖片
public async Task AddTrigger(string jobName, string jobGroupName, string triggerName, string triggerGroupName, string cron, string des)
        {
            var exitTrigger = await schedu.CheckExists(new TriggerKey(triggerName, triggerGroupName));
            if (!exitTrigger)
            {
                if (await schedu.CheckExists(new JobKey(jobName, jobGroupName)))
                {
                    var trigger = TriggerBuilder.Create().WithIdentity(triggerName, triggerGroupName).WithDescription(des).WithCronSchedule(cron).ForJob(jobName, jobGroupName).Build();
                    await schedu.ScheduleJob(trigger);
                }
            }
        }

public async Task<IList<ITrigger>> GetTrrigers()
{
    List<ITrigger> triggerList = new List<ITrigger>();
    var triggerKeys = await schedu.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
    foreach (var item in triggerKeys)
    {
        var trigger = await schedu.GetTrigger(item);
        var job = await schedu.GetJobDetail(trigger.JobKey);
        var actionName = job.GetType().FullName;
        var nextTime = trigger.GetNextFireTimeUtc();
        var preTime = trigger.GetPreviousFireTimeUtc();
        var startTime = trigger.StartTimeUtc;
        triggerList.Add(trigger);
    }
    return triggerList;
}

public async Task UpdateTrigger(string triggerName, string triggerGroupName, string des)
{
    var trigger = await schedu.GetTrigger(new TriggerKey(triggerName, triggerGroupName));
    var triggerNew = TriggerBuilder.Create().WithIdentity(triggerName, triggerGroupName).WithDescription(des).ForJob(trigger.JobKey).Build();
    await schedu.RescheduleJob(trigger.Key, triggerNew);
}
View Code 技術分享圖片
public async Task PauseTrigger(string name, string group)
{
    await schedu.PauseTrigger(new TriggerKey(name, group));
}

public async Task ResumeTrigger(string name, string group)
{
    await schedu.ResumeTrigger(new TriggerKey(name, group));
}

public async Task DelTrigger(string name, string group)
{
    await schedu.UnscheduleJob(new TriggerKey(name, group));
}
View Code

Quartz.Net—基本操作