关于定时执行程序的一些想法

来源:互联网 发布:蚂蚁金服 基金知乎 编辑:程序博客网 时间:2024/05/18 03:02
使用 Quartz 调度框架加 Windows 服务来实现定时执行一直是我们公司比较成熟的方案。最近在学习 Quartz 调度框架的时候发现对于公司的方案有一些改进的地方,那就是使用 Topshelf 来代替 Windows 服务。
    Topshelf 是创建 Windows 服务的另一种方法,它是一个开源的跨平台的宿主服务框架,支持 Windows 和 Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
     很多人调试 Windows 服务都是要先安装然后再附加进程,我觉得这样调试很麻烦,这里透露一个小妙招,那就是添加一个单元测试项目来调用业务代码。这里推荐一个 VS 插件,叫做“Unit Test Generator”。它可以帮我们生成测试方法,它这里的代码使用的都是测试语法,还需要花时间去学习,这显然不是最完美的解决方案。
    那使用  Topshelf 来创建 Windows 服务的好处究竟在哪里呢?
    第一个我觉得就是无需安装,我们使用  Topshelf 来创建 Windows 服务都是建的控制台应用程序,无需安装,调试也无需附加进程。
    第二个我觉得就是无需添加单元测试项目来进行调试。
    第三个就是用  Topshelf 来创建 Windows 服务安装超简单,仅需一个命令即可完成安装。那有人会说了,我们安装 Windows 服务都是运行一个批处理脚本就安装好了,可是能运行批处理就安装好的 Windows 服务也是加了代码才能这么方便的安装的。而使用 Topshelf 来创建 Windows 服务,你一行代码都不需要写即可完成安装,是不是很方便呢。
    其实说了这么多,还不是我写这篇文章的原因,因为最近在使用 Topshelf 来创建 Windows 服务的时候发现了一个不方便的地方,就是将应用程序安装成 Windows 服务之后发布不方便,一般人都是先卸载再发布,我觉得这么做是在太麻烦。
    其实解决的办法很简单,我们只需要在解决方案里面新建一个类库项目用来存放业务逻辑代码,然后将项目添加到引用 Topshelf 的控制台应用程序里面,这样控制台就能调用到类库里面的方法了。假如服务已经安装,做了修改需要发布,我们只需要停止服务,然后发布类库项目的 dll 即可,无需卸载又重新安装 Windows 服务,是不是很方便呢。

下面把我的项目结构截图给大家做下简单的讲解:



最后需要提醒的是, Quartz 的配置文件都需要改一下属性才有效,如图:


好了,今天的文章就到这里了,谢谢大家! 

原创粉丝点击