任务调度~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配置信息加进来,以减少程序的松耦性。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:任务调度~Quartz.net实现简单的任务调试,如需转载请自行联系原博主。

目录
相关文章
|
存储 数据安全/隐私保护
音乐宿主软件有哪些?哪个最好用?FL Studio/Cubase/Studio one
现如今市面上的音乐宿主软件有很多,同时每个音乐宿主软件都有其优缺点,选择哪款音乐宿主软件,就成了新入门小伙伴面临的一个难题,所以今天和大家分享一下,音乐宿主软件对比,音乐宿主软件需要什么配置。
6663 0
|
12月前
|
敏捷开发 数据可视化 数据挖掘
"智慧办公,从使用板栗看板开始"
板栗看板是一款基于看板管理理念的协同软件,提供直观的视觉平台,助力团队高效管理任务、跟踪进度和沟通。其核心特点包括可视化任务管理、灵活的工作流程、实时更新与通知、协同功能及数据分析,适用于项目管理、敏捷开发、跨部门协作等场景,有效提升团队效率。
|
12月前
|
机器学习/深度学习 人工智能 搜索推荐
AI技术在医疗领域的应用与前景####
本文深入探讨了人工智能(AI)技术在医疗健康领域中的多维度应用,从疾病诊断、个性化治疗到健康管理,展现了AI如何革新传统医疗模式。通过分析当前实践案例与最新研究成果,文章揭示了AI技术提升医疗服务效率、精准度及患者体验的巨大潜力,并展望了其在未来医疗体系中不可或缺的地位。 ####
|
Web App开发 移动开发 JavaScript
通过H5(浏览器/WebView/其他)唤起本地app
通过H5(浏览器/WebView/其他)唤起本地app
|
关系型数据库 MySQL 数据库连接
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
6807 52
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
|
关系型数据库 MySQL 数据安全/隐私保护
Windows环境下安装及配置MySQL
本文主要讲解在Windows环境下MySQL的安装、配置
8880 1
Windows环境下安装及配置MySQL
|
开发工具 git
Mac下终端配置(item2 + oh-my-zsh + solarized配色方案)
转载自:http://www.cnblogs.com/weixuqin/p/7029177.html 安装 首先我们下载的 iTem2 这个软件,比Mac自带的终端更加强大。直接官网 http://iterm2.com/ 下载并安装即可。
4042 0
|
编解码 Java 开发工具
海康威视SDK基于JAVA二次开发
海康威视SDK基于JAVA二次开发
3639 1
|
监控 安全 Linux
阿里云无影云桌面使用测评
本文主要讲述了关于无影云桌面的使用测评。
|
存储 弹性计算 移动开发
阿里云电脑无影云桌面购买及使用教程全流程(5分钟上手)
阿里云电脑无影云桌面购买、使用全过程,包括无影云桌面购买、地域、工作区、安全策略、创建用户名和密码及登录全过程
7551 1
阿里云电脑无影云桌面购买及使用教程全流程(5分钟上手)

热门文章

最新文章