前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简易项目搭建(用于一般杂七杂八的小功能点)3

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

作者头像
happlyfox
发布2019-05-08 11:01:50
4040
发布2019-05-08 11:01:50
举报
文章被收录于专栏:技术开源分享技术开源分享

Common和Models层都已经搭建完成

现在开始实现一个小的功能 需求: 1、每隔10秒访问数据库某张表,然后打印数据总个数 2、将应用打包成windows服务,其实就是做成一个外挂

很傻逼的一个需求,纯属于测试所用,实际项目使用还要具体分析

那我们开始吧

首当其冲的肯定是在Nuget下载对应的库,Topshelf +quartz.net 引用成功以后首先编写一个Job,代码如下

代码语言:javascript
复制
  public sealed class TestJob : IJob
    {
        private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));

        public void Execute(IJobExecutionContext context)
        {
            //建立数据库连接

            //获取数据库个数

            //打印
        }
    }

上文做的事情主要就是新建一个Job,继承IJob接口的实现Excute方法,即可启动,大概是这么个意思哈


创建一个服务,完成定时功能


创建一个windows服务,供上端调用

代码语言:javascript
复制
    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;
        }
    }

最后就是将任务打包成服务了

代码语言:javascript
复制
    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的使用

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Quartz.NET实现作业调度 - 张果 - 博客园
  • Quartz.NET的使用(附源码) - 陈珙 - 博客园
  • Quartz.NET的使用务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档