• Quartz.net 实例


    1.作业调度框架
      实例代码:

    class Program
        {
            private static ILog log = LogManager.GetLogger(typeof (Program));
            static void Main(string[] args)
            {           
                ISchedulerFactory factory=new StdSchedulerFactory();
                IScheduler scheduler = factory.GetScheduler();
                //添加实现了IJob接口的作业类
                IJobDetail job = JobBuilder.Create<MyJob>().WithIdentity("myjob", "group").Build();
                ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger", "group").WithCronSchedule("* * * * * ?").Build();
                scheduler.ScheduleJob(job, trigger);
                scheduler.Start();
                log.Info("Quartz is start:");
            }
      
        }
        public class MyJob : IJob
        {
            private static ILog log = LogManager.GetLogger(typeof (MyJob));
            public void Execute(IJobExecutionContext context)
            {
                try
                {
                    Console.WriteLine(DateTime.Now.ToString());
                    log.Info(DateTime.Now);
                }
                catch (Exception exception)
                {
                    log.Debug(exception);
                }
            }
        }
    
    配置文件如下:
    
    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <sectionGroup name="common">
          <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
        </sectionGroup>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <common>
        <logging>
          <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1211">
            <arg key="configType" value="INLINE" />
          </factoryAdapter>
        </logging>
      </common>
      <log4net>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d [%t] %-5p %l - %m%n" />
          </layout>
        </appender>
        <!--<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="debug.txt"/>
          <appendToFile value="true"/>
          
        </appender>-->
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="ApplicationLog.txt" />
          <appendToFile value="true" />
          <!--Make the rolling file name with the date and size-->
          <rollingStyle value="Composite" />
          <datePattern value="yyyyMM" />
          <maxSizeRollBackups value="100" />
          <maximumFileSize value="2MB" />
          <!--Make the rolling file name like this MyQuartzLog201303.txt, or the deault will be MyQuartzLog.txt201303-->
          <PreserveLogFileNameExtension value="true" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
          </layout>
        </appender>
        <root>
          <level value="INFO" />
          <appender-ref ref="RollingFileAppender" />
        </root>
      </log4net>
    </configuration>
    WithCronScheduler 是设置作业调度计划的时间,具体使用方法如下:
    字段 允许值 允许的特殊字符
      0-59   , - * /
      0-59   , - * /
    小时   0-23   , - * /
    日期   1-31   , - * ? / L W C
    月份   1-12 或者 JAN-DEC   , - * /
    星期   1-7 或者 SUN-SAT   , - * ? / L C #
    年(可选)   留空, 1970-2099   , - * /

     字段 允许值 允许的特殊字符 

    秒 0-59 , - * / 

    分 0-59 , - * / 
    小时 0-23 , - * / 
    日期 1-31 , - * ? / L W C 
    月份 1-12 或者 JAN-DEC , - * / 
    星期 1-7 或者 SUN-SAT , - * ? / L C # 
    年(可选) 留空, 1970-2099 , - * / 
    表达式意义 

    "0 0 12 * * ?" 每天中午12点触发 
    "0 15 10 ? * *" 每天上午10:15触发 
    "0 15 10 * * ?" 每天上午10:15触发 
    "0 15 10 * * ? *" 每天上午10:15触发 
    "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
    "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
    "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
    "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
    "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
    "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
    "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
    "0 15 10 15 * ?" 每月15日上午10:15触发 
    "0 15 10 L * ?" 每月最后一日的上午10:15触发 
    "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
    "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
    "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 

    每天早上6点 
    0 6 * * * 
    每两个小时 
    0 */2 * * * 
    晚上11点到早上8点之间每两个小时,早上八点 
    0 23-7/2,8 * * * 
    每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
    0 11 4 * 1-3 
    1月1日早上4点 
    0 4 1 1 *

     

     

    quartz的高级特性不仅如此 

    1 数据库存储 

    2 集群支持 

    3 数据库持久化任务,trigger 

    4 trigger 的停止,运行 

    5 任务的任意添加 

    6 比corntrigger 更详尽的任务安排

      7 线程的内部数据交换 

     

  • 相关阅读:
    AndroidUI组件之ListView小技巧
    iframe属性參数
    Applet 数字签名技术全然攻略
    SoftReference
    递归算法浅谈
    VS2010 打包生成exe文件后 执行安装文件出现 TODO:&lt;文件说明&gt;已停止工作并已关闭
    创建新的Cocos2dx 3.0项目并解决一些编译问题
    ORACLE触发器具体解释
    SRM 624 D2L3: GameOfSegments, 博弈论,Sprague–Grundy theorem,Nimber
    cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法
  • 原文地址:https://www.cnblogs.com/steben/p/3505599.html
Copyright © 2020-2023  润新知