Common和Models层都已经搭建完成
现在开始实现一个小的功能
需求:
1、每隔10秒访问数据库某张表,然后打印数据总个数
2、将应用打包成windows服务,其实就是做成一个外挂
很傻逼的一个需求,纯属于测试所用,实际项目使用还要具体分析
那我们开始吧
首当其冲的肯定是在Nuget下载对应的库,Topshelf +quartz.net
引用成功以后首先编写一个Job,代码如下
public sealed class TestJob : IJob
{
private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));
public void Execute(IJobExecutionContext context)
{
//建立数据库连接
//获取数据库个数
//打印
}
}
上文做的事情主要就是新建一个Job,继承IJob接口的实现Excute方法,即可启动,大概是这么个意思哈
创建一个服务,完成定时功能
创建一个windows服务,供上端调用
public sealed class TestService : ServiceControl
{
private readonly IScheduler scheduler;
public TestService()
{
//创建一个调度器
scheduler = StdSchedulerFactory.GetDefaultScheduler();
//这个任务对象就是我们将要执行的工作,job1是名称,group1是组名。
//2、创建一个任务
IJobDetail job = JobBuilder.Create<TestJob>().WithIdentity("job1", "group1").Build();
//3、创建一个触发器
//触发器定义了什么时间任务开始或每隔多久执行一次。
//DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * * * * ?") //5秒执行一次
.Build();
//4、将任务与触发器添加到调度器中
scheduler.ScheduleJob(job, trigger);
}
public bool Start(HostControl hostControl)
{
//5、开始执行
scheduler.Start();
return true;
}
public bool Stop(HostControl hostControl)
{
scheduler.Shutdown(false);
return true;
}
public bool Continue(HostControl hostControl)
{
scheduler.ResumeAll();
return true;
}
public bool Pause(HostControl hostControl)
{
scheduler.PauseAll();
return true;
}
}
最后就是将任务打包成服务了
class Program
{
private static ILog _log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
try
{
LogFactory.Initialize();
HostFactory.Run(x =>
{
x.RunAsLocalSystem();
x.Service<TestService>();
x.SetDescription("服务描述");
x.SetDisplayName("服务显示名称");
x.SetServiceName("服务名称");
});
}
catch (Exception e)
{
_log.Error(e.Message, e);
}
}
}
参考资料
网友评论