c# quartz定时任务框架的使用

一、新建windows服务项目,并从nuget引用下图标记的类库:

二、鼠标右键单击Service1.cs,点击查看代码,把类文件修改成如下:

Service1.cs

    public partial class Service1 : ServiceBase
    {
        private IScheduler scheduler;

        public Service1()
        {
            InitializeComponent();

            #region Quartz
            try
            {
                //调度器
                ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
                scheduler = schedulerFactory.GetScheduler();
                //任务、触发器执行配置
                XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
                Stream s = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"\Config\quartz_jobs.xml").BaseStream;
                processor.ProcessStream(s, null);
                processor.ScheduleJobs(scheduler);
            }
            catch (Exception ex)
            {
                //log 启动Quartz失败
            }
            #endregion
        }

        protected override void OnStart(string[] args)
        {
            scheduler.Start();
            //log 服务启动
        }

        protected override void OnStop()
        {
            if (scheduler != null)
            {
                scheduler.Shutdown(false);
            }
            //log 服务结束
        }
    }

三、在windows服务项目下建一个Config文件夹,并添加quartz_jobs.xml配置文件如下:

quartz_jobs.xml

<?xml version="1.0" encoding="utf-8" ?>
<!-- This file contains job definitions in schema version 2.0 format -->

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>
  <schedule>
    <!--TestJob Start-->
    <job>
      <name>TestJob</name>
      <group>JobGroup</group>
      <description>测试定时任务</description>
      <job-type>WindowsService1.Job.TestJob,WindowsService1</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <trigger>
      <!--<simple>
        <name>TestTrigger</name>
        <group>TriggerGroup</group>
        <job-name>TestJob</job-name>
        <job-group>JobGroup</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <repeat-count>-1</repeat-count>
        <repeat-interval>1000</repeat-interval>
      </simple>-->
      <cron>
        <name>TestTrigger</name>
        <group>TriggerGroup</group>
        <job-name>TestJob</job-name>
        <job-group>JobGroup</job-group>
        <start-time>2018-10-12T06:00:00+08:00</start-time>
        <cron-expression>0 0/1 * * * ?</cron-expression>
      </cron>
    </trigger>
    <!--TestJob End-->    
  </schedule>
</job-scheduling-data>

四、在windows服务项目下建一个Job文件夹,并添加TestJob.cs文件如下:

TestJob.cs

    [PersistJobDataAfterExecution]//保存执行状态
    [DisallowConcurrentExecution]//不允许并发执行
    public class TestJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            //to do...
        }
    }

五、在windows服务项目下建一个Bat文件夹,并添加如下批处理文件:

install.bat

sc create 服务名称 binPath= "E:\WindowsService1.exe" start= auto
sc description 服务名称 "服务描述"
pause

start.bat

net start 服务名称
pause

stop.bat

net stop 服务名称
pause 

uninstall.bat

sc delete 服务名称
pause 

  

猜你喜欢

转载自www.cnblogs.com/by-lhc/p/9790267.html