zoukankan      html  css  js  c++  java
  • Quartz.net创建windows服务

    Quartz.NET 项目地址: http://www.quartz-scheduler.net/

    1、创建windows服务项目

    2、引用Quartz.dll,Topshelf.dll

    3、添加quartz.config和quartz_jobs.xml文件,并设置为复制到输出目录为“始终复制”

    quartz.config

    # You can configure your scheduler in either <quartz> configuration section
    # or in quartz properties file
    # Configuration section has precedence
    
    quartz.scheduler.instanceName = QuartzTest
    
    # 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 = 777
    quartz.scheduler.exporter.bindName = QuartzScheduler
    quartz.scheduler.exporter.channelType = tcp
    quartz.scheduler.exporter.channelName = httpQuartz
    quartz.config

    4、添加任务处理类TestJob.cs并继承IJob接口类,实现Execute方法,此方法里面做具体任务逻辑

    TestJob.cs

    修改quartz_jobs.xml文件,增加定时处理规则。

    quartz_jobs.xml:

    <?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>
    
        <!--TestJob测试 任务配置-->
        <job>
          <name>TestJob</name>
          <group>Test</group>
          <description>TestJob测试</description>
          <job-type>QuartzWinService.Job.TestJob,QuartzWinService</job-type>
          <durable>true</durable>
          <recover>false</recover>
        </job>
        <trigger>
          <cron>
            <name>TestJobTrigger</name>
            <group>Test</group>
            <job-name>TestJob</job-name>
            <job-group>Test</job-group>
            <start-time>2015-01-22T00:00:00+08:00</start-time>
            <cron-expression>0/3 * * * * ?</cron-expression>
          </cron>
        </trigger>
        <!--多个 任务配置 配置多个job和trigger-->
         
        
      </schedule>
    </job-scheduling-data>
    quartz_jobs.xml

    5、在service1文件中添加quartz启动

    重写OnStart,OnStop,OnPause,OnContinue方法

    namespace QuartzWinService
    {
        public partial class Service1 : ServiceBase
        {
            private IScheduler scheduler;
            public Service1()
            {
                InitializeComponent();
                ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
                scheduler = schedulerFactory.GetScheduler();
            }
            protected override void OnStart(string[] args)
            {
                scheduler.Start();
                LogHelp.SysLog("Quartz服务成功启动----", "MyFirstQuartzService");
            }
            protected override void OnStop()
            {
                // 在此处添加代码以执行停止服务所需的关闭操作。
                scheduler.Shutdown();
                LogHelp.SysLog("Quartz服务成功终止", "MyFirstQuartzService");
            }
            protected override void OnPause()
            {
                scheduler.PauseAll();
            }
            protected override void OnContinue()
            {
                scheduler.ResumeAll();
            }
        }
    }
    Service1.cs

    6、添加安装程序

    修改serviceProcessInstaller1的Account LocalSystem

    最后

    cmd执行:

    C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe E:qzsdQuartzWinService.exe

    net start MyQuartzService

    pause

    粗略

    可以下代码看下,一目了然

     https://github.com/JsenKe/quartz.git

  • 相关阅读:
    java中CyclicBarrier的使用
    java并发中CountDownLatch的使用
    java中Locks的使用
    java 中的fork join框架
    java中ThreadPool的介绍和使用
    java中的daemon thread
    java中interrupt,interrupted和isInterrupted的区别
    java中的Atomic类
    怎么在java中关闭一个thread
    java中join的使用
  • 原文地址:https://www.cnblogs.com/jsenke/p/5545635.html
Copyright © 2011-2022 走看看