可视化界面管理
在任务执行的时候,我们需要实时监控,或者在一些场景下,我们需要做些人工介入;—最好能有一个可视化的界面;在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
服务改名称后,需要先原样卸载,再重新编译安装,要不然卸载还蛮麻烦的