美文网首页技术干货
简易项目搭建(用于一般杂七杂八的小功能点)3

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

作者: HapplyFox | 来源:发表于2019-04-23 15:52 被阅读0次

    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);
                }
            }
        }
    

    参考资料

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

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

    Quartz.NET的使用

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/jxvvgqtx.html