码迷,mamicode.com
首页 > Web开发 > 详细

Quartz.Net—基本操作

时间:2018-03-17 10:50:26      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:scheduler   err   添加   iss   trigger   job   code   script   post   

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—基本操作

标签:scheduler   err   添加   iss   trigger   job   code   script   post   

原文地址:https://www.cnblogs.com/wudequn/p/8587016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!