简易项目搭建(用于一般杂七杂八的小功能点)3

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().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();
                    x.SetDescription("服务描述");
                    x.SetDisplayName("服务显示名称");
                    x.SetServiceName("服务名称");

                });

            }
            catch (Exception e)
            {
                _log.Error(e.Message, e);
            }
        }
    }

参考资料

Quartz.NET实现作业调度 - 张果 - 博客园

Quartz.NET的使用(附源码) - 陈珙 - 博客园

Quartz.NET的使用

Quartz任务调度 服务日志+log4net打印日志+制作windows服务

你可能感兴趣的:(简易项目搭建(用于一般杂七杂八的小功能点)3)