任务调度~Quartz.net实现简单的任务调试

任务调度类似于sqlserver中的作业,即按周期性执行某个程序,代码段,或者某种服务,在JAVA环境中出现了Quartz,它可以简单的实现任务的调试,而像lucene一样,它会有对于的.net版本,Quartz.net,今天我们来做一个简单的实验,其时很简单的实验:

环境:.net4.0+mvc3

功能:每1分钟去向一个文件里写日志(当然,如果你要调用某个服务,只要让它实现IJob接口即可。

所需要的程序集

首先在WEB.Config的configuration节点里做一些必要的配置

 1   <configSections>
 2     <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
 3     <sectionGroup name="common">
 4       <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
 5     </sectionGroup>
 6   </configSections>
 7   <common>
 8     <logging>
 9       <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
10         <arg key="showLogName" value="true"/>
11         <arg key="showDataTime" value="true"/>
12         <arg key="level" value="INFO"/>
13         <arg key="dateTimeFormat" value="HH:mm:ss:fff"/>
14       </factoryAdapter>
15     </logging>
16   </common>
17
18   <quartz>
19     <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
20
21     <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
22     <add key="quartz.threadPool.threadCount" value="10"/>
23     <add key="quartz.threadPool.threadPriority" value="2"/>
24
25     <add key="quartz.jobStore.misfireThreshold" value="60000"/>
26     <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
27   </quartz>

在global.asax.cs里添加调用和取消调用的代码

1         protected void Application_Start()
2         {
3            WriteLogScheduler.Instance.Start();
4         }
5
6         protected void Application_End(object sender, EventArgs e)
7         {
8             WriteLogScheduler.Instance.Stop();
9         }

所要调用的任务,它需要实现IJob接口

 1     /// <summary>
 2     /// 要调度的功能模块
 3     /// </summary>
 4     public class WriteLogJob : IJob
 5     {
 6         public void Execute(IJobExecutionContext context)
 7         {
 8             string fileLogPath = AppDomain.CurrentDomain.BaseDirectory;
 9             string fileLogName = "TestQuartz_" + DateTime.Now.ToLongDateString() + "_log.txt";
10             FileInfo finfo = new FileInfo(fileLogPath + fileLogName);
11             using (FileStream fs = finfo.OpenWrite())
12             {
13                 //根据上面创建的文件流创建写数据流
14                 StreamWriter strwriter = new StreamWriter(fs);
15                 //设置写数据流的起始位置为文件流的末尾
16                 strwriter.BaseStream.Seek(0, SeekOrigin.End);
17                 //写入相关记录信息
18                 strwriter.WriteLine("发生时间: " + DateTime.Now.ToString());
19                 strwriter.WriteLine("---------------------------------------------");
20                 strwriter.WriteLine();
21                 //清空缓冲区内容,并把缓冲区内容写入基础流
22                 strwriter.Flush();
23                 strwriter.Close();
24                 fs.Close();
25             }
26         }
27
28     }

添加调用任务的代码,Quartz服务核心代码

 1  public class WriteLogScheduler
 2     {
 3
 4         static ISchedulerFactory _sf = new StdSchedulerFactory();
 5         static IScheduler _sched = _sf.GetScheduler();
 6         static WriteLogScheduler _instance = null;
 7         static object lockObj = new object();
 8
 9         /// <summary>
10         /// 线程安全的单例对象
11         /// </summary>
12         public static WriteLogScheduler Instance
13         {
14             get
15             {
16                 if (_instance == null)
17                 {
18                     lock (lockObj)
19                     {
20                         if (_instance == null)
21                         {
22                             _instance = new WriteLogScheduler();
23                         }
24                     }
25                 }
26                 return _instance;
27             }
28         }
29
30         public void Start()
31         {
32             ILog log = LogManager.GetLogger(typeof(WriteLogScheduler));
33             DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
34             // define the job and tie it to our HelloJob class
35             IJobDetail job = JobBuilder.Create<WriteLogJob>()
36                 .WithIdentity("job1", "group1")
37                 .Build();
38             // Trigger the job to run on the next round minute
39             ITrigger trigger = TriggerBuilder.Create()
40                 .WithIdentity("trigger1", "group1")
41                 .StartAt(runTime)
42                 .Build();
43             // Tell quartz to schedule the job using our trigger
44             _sched.ScheduleJob(job, trigger);
45             _sched.Start();
46         }
47         public void Stop()
48         {
49             _sched.Shutdown(true);
50         }
51
52     }

运行程序,即可看到结果了,下一讲,我将把XML配置信息加进来,以减少程序的松耦性。

时间: 2024-10-12 15:15:42

任务调度~Quartz.net实现简单的任务调试的相关文章

任务调度 -----&gt; quartz 不同时间间隔调度任务

Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序.Jobs可以做成标准的Java组件或 EJBs.Quartz的最新版本为Quartz 2.3.0. 目的:最近在想弄一下不同的时间段调度任务,不是以往那样在相同的间隔调度,而是不同的间隔时间,参考了一下Quartz官网和一些前辈的,加上自己总结的改

任务调度 QUARTZ

任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能 闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包 commons-logging log4j sff4j 等jar包要添加进去,quartz的jar包则肯定必须 首先写一个类实现Job接口 Java代码   public class QuartzDemo implements Job{ @Override public void execute(JobExe

SpringBoot整合Quartz定时任务 的简单实例 2

(1)什么是Quartz?(2)Quartz的特点:(3)Quartz专用词汇说明:(4)Quartz任务调度基本实现原理: 接下来看下具体的内容: (1)什么是Quartz? Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调度作业.它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联.简单地创建一个org.quarz.Job接口的Java类. (2)Quartz的特点: 作

Quartz初识以及简单运用

1.初识Quartz 1.1.概述 Quartz是一个完全由Java编写的一个开源的任务调度框架,说的简单点就是开发人员可以通过Quartz根据时间间隔调度任务,例如: 每隔一小时命令程序执行一个任务 每个月命令程序执行一个任务 指定某月末日命令程序执行一个任务 -- Quartz下载地址:http://www.quartz-scheduler.org/downloads/ 1.2.Quartz API 1.2.1.Scheduler--与scheduler交互的主要API; Scheduler

采用Windows服务任务调度Quartz.NET

Windows服务使用标准的Csharp编写,任务调度框架采用开源的Quartz.NET.    首先创建Windows服务-JobService     其次创建类库项目-JobLibrary    整体解决方案架构图如下:     在JobLibary中添加Quartz.NET的Nuget包引用,添加之后,vs会自动添加一系列的依赖项,这些依赖项是必须的,别手抖删掉了.            其次再添加Common.Logging.Log4Net1211的Nuget包,他是Log4net的另

Quartz 2D绘制简单图形

在Quartz 2D中,绘图是通过图形上下文进行绘制的,以下绘制几个简单的图形 首先先创建一个QuartzView.swift文件继承自UIView,然后实现drawRect方法: import UIKit class QuartzView: UIView { // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance duri

任务调度--spring下的任务调度quartz

之前写过Timer实现任务调度,这篇文章用来写一下在spring下使用quartz实现任务调度,直接上代码: 定义任务对象: package com; /** * 1. 定义任务对象 * * @author Administrator * */ public class DataBackup { //提供任务方法 - 任务实现的内容 public void backup(){ System.out.println("备份数据库"); } } spring的配置文件 <!-- 该配

最简单方法远程调试Python多进程子程序

Python 2.6新增的multiprocessing,即多进程,给子进程代码调试有点困难,比如python自带的pdb如果直接在子进程代码里面启动会抛出一堆异常,原因是子进程的stdin/out/err等文件都已关闭,pdb无法调用.据闻winpdb.Wing IDE的调试器能够支持这样的远程调试,但似乎过于重量级(好吧前者比后者要轻多了,但一样要wxPython的环境,再说pdb的灵活可靠它们难以比拟). 其实只需稍作改动即可用pdb继续调试子进程的代码,思路来自这个博客:子进程的stdi

热词统计以及Quartz.net的简单使用

一.热词统计 方案一: 设计一个表:ID       KeyWord     Count 当用户再输入框中查询的时候,我们就往表中插入数据,在插入之前首先判断是否已经存在keyword,存在的话,让Count+1 这种方案非常费时 方案二: 表 :ID      Keyword     Count 每次用户输入的时候直接插入,不需要判断是否存在,当进行热词展示的时候,通过Group By语句进行统计 同样比较费时 方案三: 表一明细表:ID   Keyword 表二汇总表:ID   KeyWor