zoukankan      html  css  js  c++  java
  • Windows服务+Quartz+EF

    1.第一步 添加新建项目

     2.在NuGet下载Quartz包(版本:2.6.2)

     3.在NuGet下载EF包(版本:6.4)

     4.点击Service1=>切换到视图代码,然后把下面代码copy进去

    先到步骤9添加日志类

    private IScheduler scheduler;
            public Service1()
            {
                // 新建一个调度器工工厂
                ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
                // 使用工厂生成一个调度器
                scheduler = schedulerFactory.GetScheduler();
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                Log.WriteLog("", "", "服务已开启");
                scheduler.Start();
            }
    
            protected override void OnPause()
            {
                scheduler.PauseAll();
                base.OnPause();
                Log.WriteLog("", "", "服务已暂停");
            }
            protected override void OnStop()
            {
                if (!scheduler.IsShutdown)
                {
                    scheduler.Shutdown();
                }
                Log.WriteLog("", "", "服务已停止");
    
            }
            protected override void OnContinue()
            {
                scheduler.ResumeAll();
                base.OnContinue();
                Log.WriteLog("", "", "服务已路过");
            }

    5.生成安装程序

     6.点击安装程序,右键属性,修改参数

     

     7.在app.config里添加quartz配置、数据库连接配置(configuration节点里)

     <quartz>
            <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
            <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
            <add key="quartz.threadPool.threadCount" value="10"/>
            <add key="quartz.threadPool.threadPriority" value="2"/>
            <add key="quartz.jobStore.misfireThreshold" value="60000"/>
            <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
            <!--******************************Plugin配置*********************************************-->
            <add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz"/>
            <add key="quartz.plugin.xml.fileNames" value="~/quartz_jobs.xml"/>
        </quartz>

    8.添加业务逻辑类

    namespace WindowsServiceTest
    {
        public class Test1 : IJob
        {
    
            public void Execute(IJobExecutionContext context)
            {
                try
                {
                    //业务逻辑
                }
                catch (Exception e)
                {
                    Log.WriteLog("", "", e.ToString());
                }
            }
        }
    }

    9.日志类

     public class Log
        {
            public static void WriteLog(string type, string className, string content)
            {
                string path = AppDomain.CurrentDomain.BaseDirectory + "\log\";
                if (!Directory.Exists(path))//如果日志目录不存在就创建
                {
                    Directory.CreateDirectory(path);
                }
                string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//获取当前系统时间
                string filename = path + "/" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";//用日期对日志文件命名
    
                //创建或打开日志文件,向日志文件末尾追加记录
                StreamWriter mySw = System.IO.File.AppendText(filename);
    
                //向日志文件写入内容
                string write_content = time + " " + type + " " + className + ": " + content;
                mySw.WriteLine(write_content);
    
                //关闭日志文件
                mySw.Close();
            }
        }

    10.添加quartz_jobs.xml文件(配置信息在步骤7里面)

    Tip:WindowsServiceTest是windows服务的项目名,Test1是业务逻辑执行类名
    <?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>
            <!--定义示例任务1 Job-->
            <job>
                <name>Test1</name>
                <group>Test1Group</group>
                <description>Quartz.Net示例任务1</description>
                <job-type>WindowsServiceTest.Test1,WindowsServiceTest</job-type>
                <durable>true</durable>
                <recover>false</recover>
            </job>
    
            <!--定义示例任务1 触发器 每月最后一天16点40分执行一次Test1任务-->
            <trigger>
                <cron>
                    <name>Test1Trigger</name>
                    <group>Test1TriggerGroup</group>
                    <job-name>Test1</job-name>
                    <job-group>Test1Group</job-group>
                    <!--下午15点53分执行-->
                    <cron-expression>0 53 15 * * ?</cron-expression>
                </cron>
            </trigger>
        </schedule>
    </job-scheduling-data>

    11.安装windows服务(生成=>进入bin=>进入debug,看一下有没有生成的windows服务exe)

    tip:将以下几个bat文件copy到debug文件下

    ①.安装.bat

    sc create MyVipWinService binPath= "%~dp0WindowsServiceTest.exe" start= auto
    net start MyVipWinService
    pause

    ②.启动.bat

    net start MyVipWinService
    pause

    ③.停止.bat

    net stop MyVipWinService
    pause

    ④.卸载.bat

    net stop MyVipWinService
    sc delete MyVipWinService binPath= "%~dp0JDWindowsServiceTest.exe" start= auto
    pause

    ⑤.重启.bat

    net stop MyVipWinService
    net start MyVipWinService
    pause

    copy完之后,双击安装.bat,会弹出cmd提示有没有安装成功

    最后去服务瞅一眼有没有安装成功!

  • 相关阅读:
    洛谷P3513 [POI2011]KON-Conspiracy
    柱状图 三分法+树状数组
    CF习题集三
    CF习题集二
    CF习题集一
    单调队列总结
    SP688 SAM
    lemon使用方法
    洛谷 P2403 [SDOI2010]所驼门王的宝藏 题解
    字符串学习笔记二
  • 原文地址:https://www.cnblogs.com/MuZiLily/p/15102685.html
Copyright © 2011-2022 走看看