前提背景:
项目中需要定时去根据数据库A 的数据来同步数据库B 。一开始在global全局文件中写定时任务,发现存在进程池被回收,以及IIS 重启等一系列问题 导致定时任务执行个一两天就中断的情况(代码是从网上copy的发现注释有很大的问题,另外还需要更改iis的回收机制来配合代码,否则不会成功)
解决方案:
放弃使用global文件,使用windows服务+Quartz.NET
了解工具:
Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。
Quartz框架的一些基础概念解释:
Scheduler 作业调度器。
IJob 作业接口,继承并实现Execute, 编写执行的具体作业逻辑。
JobBuilder 根据设置,生成一个详细作业信息(JobDetail)。
TriggerBuilder 根据规则,生产对应的Trigger
好了接下来打开vs新建widows service程序 打开service1文件 点击图中文字
using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
StartService();//启动服务执行代码
}
private void StartService()
{
//to do something
}
protected override void OnStop()
{
//关闭服务执行代码
}
}
}
private void StartService()
{
//从工厂中获取一个调度器实例化
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start(); //开启调度器
IJobDetail job = JobBuilder.Create<Class1>()
.WithIdentity("myJob", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("mytrigger", "group1")
.StartNow()
.WithCronSchedule("0 0 0,6,12,18 * * ?") //时间表达式,每天的0点、6点、12点、18点都执行一次
.Build();
scheduler.ScheduleJob(job, trigger);
}
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTcms.Common;
namespace WindowsService1
{
public class Class1: IJob
{
public void Execute(IJobExecutionContext context)
{
//这里放你的业务代码
DTcms.Model.cndingentity.interface_record_model model = new DTcms.Model.cndingentity.interface_record_model();
DTcms.BLL.interface_record ir_bll = new DTcms.BLL.interface_record();
model.action = "quartz.net";
model.is_success = 0; //
model.description = "quartz.net开始跑了";
model.create_time = DateTime.Now;
ir_bll.Add(model);
}
}
}
好吧我被这个插入代码坑了 接下来的内容都只能在这里面写了
开始安装windows服务
管理员身份打开cmd,进入.net 4.0目录,一般都是C:\Windows\Microsoft.NET\Framework\v4.0.30319
运行命令 InstallUtil.exe 项目目录

cmd 输入services.msc 就可以看到我们刚刚安装的服务了

溜了溜了