Quartz.net使用入门(一)

quartz.config配置文件

#调度器名,无关紧要,名字任意定
quartz.scheduler.instanceName = ServerScheduler
org.quartz.scheduler.instanceId = AUTO
quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz

# configure thread pool info   配置数据库连接池
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool,Quartz
quartz.threadPool.threadCount = 10
quartz.threadPool.threadPriority = Normal


# job initialization plugin handles our xml reading, without it defaults are used
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml

# export this server to remoting context
# quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter,Quartz
# quartz.scheduler.exporter.port = 555
# quartz.scheduler.exporter.bindName = QuartzScheduler
# quartz.scheduler.exporter.channelType = tcp
# quartz.scheduler.exporter.channelName = httpQuartz

quartz_jobs.xml文件

<?xml version="1.0" encoding="utf-8" ?>

<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>
        <!--2.0版本中的job相当于1.x版本中的<job-detail>,这个节点是用来定义每个具体的任务的,多个任务请创建多个job节点即可-->
        <job>
            <name>sampleJob</name>  <!--任务名称,同一个group中多个job的name不能相同,若未设置group则所有未设置group的job为同一个分组(必须设置)-->
            <group>sampleGroup</group><!--任务所属分组,用于标识任务所属分组-->
            <description>获取订单汇总服务</description>
            <job-type>AllOrdersService.GetOrdersJob, AllOrdersService</job-type> <!--任务类型,任务的具体类型及所属程序集,格式:实现了IJob接口的包含完整命名空间的类名,程序集名称-->
            <durable>true</durable><!--<durable>(持久性)-如果一个Job是不持久的, 一旦没有触发器与之关联,它就会被从scheduler 中自动删除-->
            <recover>false</recover>
        </job>

        <!--trigger 任务触发器,用于定义使用何种方式触发任务(job),同一个job可以定义多个trigger ,多个trigger 各自独立的执行调度,每个trigger 中必须且只能定义一种触发器类型(calendar-interval、simple、cron)
            calendar-interval 一种触发器类型,使用较少,此处略过-->

        <trigger>
            <!--cron复杂任务触发器使用cron表达式定制任务调度-->
            <cron>
                <name>between7and10_Trigger</name> <!--触发器名称,同一个分组中的名称必须不同-->
                <group>sampleJobTriggerGroup</group><!--触发器组-->
                <description>获取订单汇总服务触发器</description>
                <job-name>sampleJob</job-name> <!--要调度的任务名称,该job-name必须和对应job节点中的name完全相同-->
                <job-group>sampleGroup</job-group>  <!--调度任务(job)所属分组,该值必须和job中的group完全相同-->

                <!--定义示例任务1 触发器 7点到10点之间 每30分钟执行一次GetOrdersJob任务-->
                <cron-expression>0 0/30 7-10 * * ?</cron-expression>
            </cron>
        </trigger>

        <trigger>
            <cron>
                <name>between11and23_Trigger</name>
                <group>sampleJobTriggerGroup</group>
                <description>获取订单汇总服务触发器2</description>
                <job-name>sampleJob</job-name>
                <job-group>sampleGroup</job-group>
              <!--定义示例任务1 触发器 11点到23点之间 每30分钟执行一次GetOrdersJob任务-->
                <cron-expression>0 0/30 11-23 * * ?</cron-expression>
            </cron>
        </trigger>
    </schedule>

</job-scheduling-data>

GetOrdersJob.cs作业

   public class GetOrdersJob : IJob
    {
        #region IJob 成员

        public void Execute(IJobExecutionContext context)
        {
             //业务逻辑操作
             //对订单的同步,统计,
        }

        #endregion
    }

Windows服务主程序GetDataService.cs:

  public partial class GetDataService : ServiceBase
    {
        private readonly ILog logger;
        private IScheduler scheduler;

        public GetDataService()
        {
            InitializeComponent();

            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
        }

        protected override void OnStart(string[] args)
        {
            scheduler.Start();
            //LogHelper.WriteFile(DateTime.Now + ":启动了服务A!");

        }

        protected override void OnStop()
        {
            scheduler.Shutdown(false);
            //LogHelper.WriteFile(DateTime.Now + ":停止执行服务A!");
        }

        protected override void OnPause()
        {
            scheduler.PauseAll();
        }

        protected override void OnContinue()
        {
            scheduler.ResumeAll();
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz.NET是一款开源的任务调度框架,可以用于在.NET应用程序中调度作业(Job)和触发器(Trigger)。下面是一个简单的Quartz.NET入门用法: 1. 安装Quartz.NET 可以通过NuGet包管理器来安装Quartz.NET,或者从官网下载源代码并编译。 2. 创建Job类 Job类是一个实现了IJob接口的类,可以在其中定义具体的作业逻辑。例如: ``` public class MyJob : IJob { public async Task Execute(IJobExecutionContext context) { // 在这里实现具体的作业逻辑 Console.WriteLine("Hello, Quartz.NET!"); } } ``` 3. 创建Trigger Trigger是用于定义作业执行的时间和频率的对象。可以根据需求选择不同的Trigger类型。例如,以下是一个简单的Trigger: ``` ITrigger trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10) .RepeatForever()) .Build(); ``` 上述代码创建了一个简单的Trigger,它会立即开始执行,并且每隔10秒重复一次。 4. 创建Scheduler Scheduler是任务调度框架的核心对象,它负责管理所有作业和触发器,以及执行调度任务。可以通过以下代码来创建一个Scheduler: ``` ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = await schedulerFactory.GetScheduler(); ``` 5. 将Job和Trigger注册到Scheduler中 在创建了Job和Trigger之后,需要将它们注册到Scheduler中,以便Quartz.NET能够管理它们。例如: ``` JobDetailImpl jobDetail = new JobDetailImpl("myJob", typeof(MyJob)); await scheduler.ScheduleJob(jobDetail, trigger); ``` 上述代码将MyJob类注册为一个作业,并将上述创建的Trigger与该作业关联起来。 6. 启动Scheduler 最后,需要启动Scheduler以开始执行作业。例如: ``` await scheduler.Start(); ``` 现在,Quartz.NET就会执行MyJob作业,并根据Trigger定义的时间和频率重复执行。当然,这只是Quartz.NET入门用法,Quartz.NET还有很多高级功能和配置选项,可以根据具体需求进行使用和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值