zoukankan      html  css  js  c++  java
  • Quartz.net使用记录

    1、引入dll文件:

      nuget控制台:安装quartz:Install-Package Quartz

             安装log4net:Install-Package log4net,这里使用log4net记录一些windows服务运行日志,以便查看。

      安装完成,会添加4个引用,分别是:Quartz.dll、Common.Logging.dll、Common.Logging.Core.dll、log4net.dll。

    2、log4net的相关配置:

      config配置:非web项目是在app.config文件中,加入下面代码。注意:configSections节点必须放在最上面,否则会出现‘服务没有响应控制功能’错误,不能启动服务。

    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <log4net debug="false">
        <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
        <!-- Print only messages of level DEBUG or above in the packages -->
        <logger name="ServiceLogger">
          <level value="INFO" />
          <appender-ref ref="SysAppender" />
        </logger>
    
        <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
          <param name="File" value="log/" />
          <param name="AppendToFile" value="true" />
          <param name="RollingStyle" value="Date" />
          <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
          <param name="StaticLogFileName" value="false" />
          <layout type="log4net.Layout.PatternLayout,log4net">
            <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
            <param name="Header" value="&#xD;&#xA;----------------------header--------------------------&#xD;&#xA;" />
            <param name="Footer" value="&#xD;&#xA;----------------------footer--------------------------&#xD;&#xA;" />
          </layout>
        </appender>
      </log4net>

      非web项目在AssemblyInfo.cs加入(web项目一般在global文件中),log4net的加载配置:

    //加载log4配置
    [assembly:log4net.Config.XmlConfigurator()]

       使用时先得到log对象:"ServiceLogger"是配置文件中的logger配置名。

     log4net.ILog log = log4net.LogManager.GetLogger("ServiceLogger");
       log.Info(DateTime.Now+":定时任务执行");

    3、Quartz.Net的配置:

      2个文件:quartz.config、quartz_jobs.xml,生成时要选择始终复制。

      在线cron生成:http://cron.qqe2.com/

    # You can configure your scheduler in either <quartz> configuration section
    # or in quartz properties file
    # Configuration section has precedence
    
    quartz.scheduler.instanceName = ServerScheduler
    
    # 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
    <?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>
    
        <job>
          <name>Job</name>
          <group>demoGroup</group>
          <description>JobDemo服务描述</description>
          <job-type>WinService.Job,WinService</job-type>
          <durable>true</durable>
          <recover>false</recover>
        </job>
    
        <trigger>
          <cron>
            <name>JobTrigger</name>
            <group>JobTriggerGroup</group>
            <description>Trigger描述</description>
            <job-name>Job</job-name>
            <job-group>demoGroup</job-group>
            <cron-expression>0/2 * * * * ?</cron-expression>
          </cron>
        </trigger>
      </schedule>
    </job-scheduling-data>

      新建类,实现IJob接口,在Execute方法中写要定时执行的任务代码。

      开始与关闭任务:这是在windows服务开始时,同时开始任务的执行。

     public partial class ServiceQuartz : ServiceBase
        {
            private log4net.ILog log;
            private ISchedulerFactory schedulerFactory;
            private IScheduler scheduler;
            public ServiceQuartz()
            {
                InitializeComponent();
                log = log4net.LogManager.GetLogger("ServiceLogger");
                schedulerFactory = new StdSchedulerFactory();
                scheduler = schedulerFactory.GetScheduler();
            }
    
            protected override void OnStart(string[] args)
            {
    
                log.Info("------------------定时任务已启动------------------------"+DateTime.Now);
                scheduler.Start();
            }
    
            protected override void OnStop()
            {
                log.Info("-------------------------定时任务被关闭了---------------"+DateTime.Now);
                scheduler.Shutdown();
            }
        }

    4、服务安装与卸载:

      cmd要以管理员身份运行

      安装:C:WindowsMicrosoft.NETFramework64v4.0.30319>InstallUtil.exe D:ProjectQuartzTestWinServiceinReleaseWinService.exe

      卸载:sc delete servicequartz

  • 相关阅读:
    牛客挑战赛48E速度即转发【带修莫队,分块】
    P3180[HAOI2016]地图【圆方树,莫队,分块】
    Jetty 教程
    Leetcode 238. Product of Array Except Self
    WebService [Debug] undefined element declaration 's:schema'
    WebService [Debug] java.net.BindException: Can't assign requested address
    SQL Server 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()
    Leetcode 110 判断二叉树是否为平衡二叉树
    WebService 使用JDK开发WebService
    WebService [Debug] javax.xml.ws.WebServiceException: Undefined port type
  • 原文地址:https://www.cnblogs.com/zhaoyihao/p/5412696.html
Copyright © 2011-2022 走看看