QuartZ 定时任务(二)

可视化界面管理

在任务执行的时候,我们需要实时监控,或者在一些场景下,我们需要做些人工介入;—最好能有一个可视化的界面;在QuartZ中是可以支持

  • 1.新建一个Web程序(AspNetMVC, webfrom,控制台)
  • 2.Nuge引入QuartZ+CrystalQuartz.Remote
  • 3.在StdSchedulerFactory配置相关信息(Scheduler的运行的时候需要使用到相关的类库+端口号)
  • 4.统一端口号,监控端去访问统一的端口号下的CrystalQuartzPanel.axd就可以通过管理界面实时了解人物执行情况;(http://localhost:63030/CrystalQuartzPanel.axd)
    public class ScheduleManager
    {
        public async static Task<IScheduler> BuildScheduler()
        {
            var properties = new NameValueCollection();
            properties["quartz.scheduler.instanceName"] = "定时作业后台监控系统";

            // 设置线程池
            properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
            properties["quartz.threadPool.threadCount"] = "5";
            properties["quartz.threadPool.threadPriority"] = "Normal";

            // 远程输出配置
            properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
            properties["quartz.scheduler.exporter.port"] = "5005";
            properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
            properties["quartz.scheduler.exporter.channelType"] = "tcp";

            var schedulerFactory = new StdSchedulerFactory(properties);
            IScheduler _scheduler = await schedulerFactory.GetScheduler();
            return _scheduler;
        }
    }
                IScheduler scheduler = await ScheduleManager.BuildScheduler();

配置文件管理任务

1.准备配置文件,配置Job+trigger相关信息
2.读取配置文件,获取信息,生成对应的Job和Trigger
3.通过配置文件去配置scheduler
4.启动运行

<?xml version="1.0" encoding="UTF-8"?>
<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>sendEmailJob</name>
      <group>group2</group>
      <description>This is 课程1</description>
      <job-type>Framework.DispatcherProject.CustomJob.SendEmailJob,Framework.DispatcherProject</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <trigger>
      <cron>
        <name>sendEmailTrigger</name>
        <group>group2</group>
        <job-name>sendEmailJob</job-name>
        <job-group>group2</job-group>
        <cron-expression>5/3 * * * * ?</cron-expression>
      </cron>
    </trigger>


	  <job>
		  <name>InsertDateTest</name>
		  <group>group3</group>
		  <description>This is 课程2</description>
		  <job-type>Framework.DispatcherProject.CustomJob.InsertDateJob,Framework.DispatcherProject</job-type>
		  <durable>true</durable>
		  <recover>false</recover>
	  </job>
	  <trigger>
		  <cron>
			  <name>InsertDateTrigger</name>
			  <group>group3</group>
			  <job-name>InsertDateTest</job-name>
			  <job-group>group3</job-group>
			  <cron-expression>1/2 * * * * ?</cron-expression>
		  </cron>
	  </trigger>
	  
    <!--<job>
      <name>UpdateInventoryJob</name>
      <group>Update</group>
      <description>定时更新商品库存</description>
      <job-type>TopshelfAndQuartz.UpdateInventoryJob,TopshelfAndQuartz</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <trigger>
      <cron>
        <name>UpdateInventoryTrigger</name>
        <group>Update</group>
        <job-name>UpdateInventoryJob</job-name>
        <job-group>Update</job-group>
        <cron-expression>0 0/1 * * * ?</cron-expression>
      </cron>
    </trigger>-->
  </schedule>
</job-scheduling-data>
                StdSchedulerFactory factory = new StdSchedulerFactory();
                IScheduler scheduler = await factory.GetScheduler();
                
                //使用配置文件
                XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
                await processor.ProcessFileAndScheduleJobs("~/CfgFiles/quartz_jobs.xml", scheduler);
                await scheduler.Start();        

定时作业托管到WindowsService

WindowsService:可以设置随机自己启动,不会收回

  • 1.新建一个WindowsService服务
  • 2.添加WindowsServcie安装程序
  • 3.注册服务
  • 4.可以通过vs中的附加到进程来调试服务(任务管理器中可查看服务的id号)
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        CustomLogger logger = new CustomLogger(typeof(Service1));

        protected override void OnStart(string[] args)
        {
        	//记录日志,用于测试服务
            CustomLogger logger = new CustomLogger(typeof(Service1));
            logger.Info("服务已经已经启动。。。。");
            
            //启动定时任务
            QuartZManager.Init();
        }

        protected override void OnStop()
        {
            logger.Info("服务已经已经停止。。。。");
        }
    }

在这里插入图片描述
在这里插入图片描述

注册和卸载服务

cmd运行以下命令注册和卸载服务

管理员身份打开

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil  D:\ZXWork\ZhaoxiFramework.WindowsServcie.exe

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil /u  D:\ZXWork\ZhaoxiFramework.WindowsServcie.exe

服务改名称后,需要先原样卸载,再重新编译安装,要不然卸载还蛮麻烦的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值