zoukankan      html  css  js  c++  java
  • Quartz.Net 2.0 bate1 使用

    下载后发现在XP下无法使用
    安装,编译后找到生成目录在命令行下运行下面的命令进行安装与卸载
    按照:>  Quartz.Server.exe install

    卸载:>  Quartz.Server.exe uninstall

    说明,需要注意保证开发用的Quartz.dll与windows服务的Quarz.dll是同一个版本的

    模块:Quartz.Server中使用topShelf来实现Windows服务的集成
    参考:http://www.cnblogs.com/shanyou/archive/2011/05/04/2037008.html

    模块:Quartz.Server中使用了Common.Logging作为日志接口,
    使用Common.Logging目的是解藕应用程序与log4net,EntLib等日志组件。
    参考:http://www.cnblogs.com/wucg/archive/2010/07/26/1784924.html
           http://www.cnblogs.com/wdfrog/archive/2010/05/14/1735300.html

    Windows事件类型注册工具:


    (图1)

    (图2)

    ============下载===============

    配置文件示例:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    	<configSections>
    		<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    	        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    		<sectionGroup name="common">
    			<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    		</sectionGroup>
    	</configSections>
    
            <connectionStrings>
            <add name="JL_MFGContext" providerName="System.Data.SqlClient" connectionString="Data Source=192.168.1.7;Initial Catalog=JL_MFG;UID=sa;PWD=xxxx;" />
            </connectionStrings>
       
    	<common>
    		<logging>
    			<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
    				<arg key="configType" value="INLINE" />
    			</factoryAdapter>
    		</logging>
    	</common>
    
    	<log4net>
    		<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
                            <LogName value="Quartz任务日志" />
                            <ApplicationName value="Quartz任务日志" />
    			<layout type="log4net.Layout.PatternLayout">
    				<conversionPattern value="%d [%t] %-5p %l - %m%n" />
    			</layout>
    		</appender>
                    <appender name="ProductBatchAnalysisLogAppender" type="log4net.Appender.EventLogAppender">
                            <LogName value="Quartz任务日志" />
                            <ApplicationName value="成品材料分析" />
    			<layout type="log4net.Layout.PatternLayout">
    				<conversionPattern value="%d [%t] %-5p %l - %m%n" />
    			</layout>
    		</appender>
                  
    		<root>
    			<level value="INFO" />
    			<appender-ref ref="EventLogAppender" /> 
    		</root>
            <logger name="ProductBatchAnalysis" additivity="false">
    			<level value="DEBUG" />
    			<appender-ref ref="ProductBatchAnalysisLogAppender" />
    		</logger>
    	</log4net>
    
      <!-- 
        We use quartz.config for this server, you can always use configuration section if you want to.
        Configuration section has precedence here.  
      -->
    	<!--
      <quartz >
      </quartz>
      -->
    </configuration>
    

    上面将Quartz.Server与ProductBatchAnalysis分成了两个事件源"Quartz任务日志"与"成品材料分析",
    写入同一个LogName为"Quartz任务日志"的日志文件中(参考上面的图1)
    <logger>节点使用additivity="false"来屏蔽root的EventLogAppender的影响(避免一个LogEntity写两次)

    实现的IJob代码

      [DisallowConcurrentExecution()]
       public class ProductBatchAnalysis :IJob
        {
    
            private static readonly ILog logger = LogManager.GetLogger(typeof(ProductBatchAnalysis).Name ); //或者GetLogger("ProductBatchAnalysis")
    
            private JL_MFGContext _DBCtx;
            private JL_MFGContext DBCtx
            {
                get
                {
                    if(_DBCtx==null)
                    {
                        _DBCtx=new JL_MFGContext();
                    }
                    return _DBCtx;
                }
            }
            public void Execute(IJobExecutionContext context)
            {
                
                try
                {
                    logger.Debug("成品批次分析任务开始");
                    DBCtx.sim_Log.Add(new sim_Log
                    {
                        AddTime = DateTime.Now,
                        Content = "新加的动动!",
                        ExperimentId = 88
    
                    });
                    DBCtx.SaveChanges();
    
                    logger.Debug("成品批次分析任务结束!");
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
    
                    #region 抛出错误给Quartz
                    JobExecutionException toThrow = new JobExecutionException(ex);
                    toThrow.RefireImmediately = false;
                    toThrow.UnscheduleFiringTrigger = false;
                    toThrow.UnscheduleAllTriggers = false;
                    throw toThrow;
                    #endregion
                }
                
                
    
                
            }
    
      
        }
    

    Quartz.net  Jobs文件配置

    <?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>ProductBatchAnalysis</name>
            <group>ProductBatchAnalysis-Group</group>
            <description>Sample job for Quartz Server</description>
            <job-type>MFGJobs.ProductBatchAnalysis,MFGJobs</job-type>
            <durable>true</durable>
            <recover>false</recover>
        </job>
        
        <trigger>
          <cron>
            <name>cronName2</name>
            <group>cronGroup2</group>
            <job-name>ProductBatchAnalysis</job-name>
            <job-group>ProductBatchAnalysis-Group</job-group>
    <!-- 使用cron表达公式时应将start-time去掉不然电脑重启后,如果start-time符合要求者任务就会执行一遍 --> <!-- <start-time>1982-06-28T18:15:00+02:00</start-time> --> <cron-expression>0/10 * * ? * *</cron-expression> </cron> </trigger> </schedule> </job-scheduling-data>

    注意:使用cron是需要将start-time节点取消掉防止任务在电脑重启后重复执行
    上面使用了Cron表达式 ,
    参考:http://www.cnblogs.com/wdfrog/archive/2011/06/27/2091404.html
          http://www.cnblogs.com/zhangronghua/archive/2009/10/21/1376431.html
          

    文件结构:

    使用AdoJobStore

    # jobStore setting
    quartz.jobStore.misfireThreshold = 60000
    quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
    quartz.jobStore.useProperties = false
    quartz.jobStore.dataSource = default
    quartz.jobStore.tablePrefix = QRTZ_
    quartz.jobStore.clustered = true
    quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = @lockName
    quartz.dataSource.default.connectionString = Server=(local);Database=quartz;Trusted_Connection=True
    quartz.dataSource.default.provider = SqlServer-20
    

    使用参数:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Quartz;
    using Model.Entities;
    using Model;
    using Common.Logging;
    using MFG.BLL.PMA;
    namespace MFGJobs
    {
        /// <summary>
        /// 产品批次分析任务
        /// </summary>
        /// 
        [DisallowConcurrentExecution()]
        [PersistJobDataAfterExecution()]
       public class ProductBatchAnalysis :IJob
        {
    
            private static readonly ILog logger = LogManager.GetLogger(typeof(ProductBatchAnalysis).Name );
    
            private JL_MFGContext _DBCtx;
            private JL_MFGContext DBCtx
            {
                get
                {
                    if(_DBCtx==null)
                    {
                        _DBCtx=new JL_MFGContext();
                    }
                    return _DBCtx;
                }
            }
            public void Execute(IJobExecutionContext context)
            {
                
                try
                {
                    
                    int offsetDays=0;
                    int days = 1;
                    if(context.JobDetail.JobDataMap.ContainsKey("OffsetDays"))
                    {
                      offsetDays= context.JobDetail.JobDataMap.GetInt("OffsetDays");
                    }
                    if (context.JobDetail.JobDataMap.ContainsKey("Days"))
                    {
                        days = context.JobDetail.JobDataMap.GetInt("Days");
                    }
                    DateTime bTime=DateTime.Now.Date.AddDays(offsetDays);
                    DateTime eTime=bTime.AddHours(24*days);
    
                    logger.InfoFormat("开始,成品批次分析任务,时间段{0}到{1}",bTime,eTime);
    
                    PMAManager manager = new PMAManager(DBCtx, bTime, eTime);
                    manager.DoResolve();
    
                    logger.Info("完成,成品批次分析任务!");
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
    
                    #region 抛出错误给Quartz
                    JobExecutionException toThrow = new JobExecutionException(ex);
                    toThrow.RefireImmediately = false;
                    toThrow.UnscheduleFiringTrigger = false;
                    toThrow.UnscheduleAllTriggers = false;
                    throw toThrow;
                    #endregion
                }
                
                
    
                
            }
    
      
        }
    }

     配置文件参考:

    --》Quartz.NET 2.0 配置文件详解

  • 相关阅读:
    SpringBoot系列之切换log4j日志框架
    SpringBoot系列之日志框架使用教程
    SpringBoot系列之集成logback实现日志打印(篇二)
    源码学习系列之SpringBoot自动配置(篇二)
    SpringBoot系列之@Conditional注解用法简介
    7.Maven命令
    6.Maven构建过程的各个环节
    5.Maven坐标
    4.用IntelliJ IDEA 创建Maven Web
    3.用IntelliJ IDEA 创建Maven
  • 原文地址:https://www.cnblogs.com/wdfrog/p/2258772.html
Copyright © 2011-2022 走看看