将Quartz.NET集成到 Castle中
可以通过称为 Facility 的组件用控制反转 (Inversion of Control, IoC) 和依赖注入将 第三方组件插入内核中。Startable Facility当一个组件满足一定的依赖关系之后,让它自动运行,比如说启动一个窗体或者启动某种服务。 Startable Facility的使用可以说是非常地简单,只要我们的组件实现了IStartable接口就可以了,关于Startable Facility具体可参看Castle IOC容器实践之Startable Facility(一)、Castle IOC容器实践之Startable Facility(二)。Quartz 是一个要与 Castle集成的大项目,因为它仅需要您用 Castle的生命周期来启动和停止它。这意味着,当 Castle启动时,您想要 Quartz 启动,当 Castle关闭时,您想要 Quartz 停止。
1: using Castle.Core;
2: using Quartz.Impl;
3: using Quartz;
4: using Common.Logging;
5: using System.Threading;
6:
7: namespace QuartzComponent
8: {
9: [Transient]
10: public class QuartzStartable : IStartable
11: {
12: private ISchedulerFactory _schedFactory;
13:
14: private static ILog log = LogManager.GetLogger(typeof(QuartzStartable));
15:
16: public QuartzStartable(ISchedulerFactory schedFactory)
17: {
18: _schedFactory = schedFactory;
19: }
20:
21: public void Start()
22: {
23: log.Info("Starting service");
24: IScheduler sched = _schedFactory.GetScheduler();
25:
26: log.Info("------- Scheduling Jobs ----------------");
27:
28: // jobs can be scheduled before sched.start() has been called
29:
30: // get a "nice round" time a few seconds in the future...
31: DateTime ts = TriggerUtils.GetNextGivenSecondDate(null, 15);
32:
33: // job1 will only fire once at date/time "ts"
34: JobDetail job = new JobDetail("job1", "group1", typeof(SimpleQuartzJob));
35: SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1");
36: // set its start up time
37: trigger.StartTime = ts;
38: // set the interval, how often the job should run (10 seconds here)
39: trigger.RepeatInterval = 10000;
40: // set the number of execution of this job, set to 10 times.
41: // It will run 10 time and exhaust.
42: trigger.RepeatCount = 100;
43:
44:
45: // schedule it to run!
46: DateTime ft = sched.ScheduleJob(job, trigger);
47: log.Info(string.Format("{0} will run at: {1} and repeat: {2} times, every {3} seconds",
48: job.FullName, ft.ToString("r"), trigger.RepeatCount, (trigger.RepeatInterval / 1000)));
49: log.Info("------- Waiting five minutes... ------------");
50:
51: sched.Start();
52: try
53: {
54: // wait five minutes to show jobs
55: Thread.Sleep(300 * 1000);
56: // executing...
57: }
58: catch (ThreadInterruptedException)
59: {
60: }
61:
62:
63: }
64:
65: public void Stop()
66: {
67: log.Info("Stopping service");
68: try
69: {
70: IScheduler scheduler = _schedFactory.GetScheduler();
71: scheduler.Shutdown(true);
72: }
73: catch (SchedulerException se)
74: {
75: log.Error("Cannot shutdown scheduler.", se);
76: }
77:
78: }
79: }
80: }
1: namespace QuartzComponent
2: {
3: class ConsoleMain
4: {
5: static ILog log = LogManager.GetLogger(typeof(ConsoleMain));
6:
7: [STAThread]
8: public static void Main(string[] args)
9: {
10: IWindsorContainer container = new WindsorContainer();
11: //添加Facility
12:
13: container.AddFacility("startable", new StartableFacility());
14:
15: container.AddComponent("Scheduler", typeof(ISchedulerFactory), typeof(StdSchedulerFactory));
16:
17: container.AddComponent("QuartzStartable", typeof(QuartzStartable));
18:
19: //Console.Read();
20: }
21: }
22: }
0
分享
收藏
502篇文章,102W+人气,0粉丝
Ctrl+Enter 发布
发布
取消
推荐专栏更多
大数据时代的微服务之路
共18章 | 纯洁微笑
¥51.00 669人订阅
自动化运维开发新概念
共20章 | 抚琴煮酒
¥51.00 430人订阅
猜你喜欢
扫一扫,领取大礼包
0
张善友
转载于:https://blog.51cto.com/shanyou/73974
将Quartz.NET集成到 Castle中相关推荐
- 【组队学习】【24期】集成学习(中)
集成学习(中) 开源内容: https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearni ...
- [原创]浅谈持续集成在测试中的应用
[原创]浅谈持续集成在测试中的应用 今天抽空理了下思路,来谈谈持续集成在测试中的应用,关于持续集成的介绍,可以参见我之前写的 浅谈我对持续集成的理解. 闲话少说,简单先介绍下,持续集成在测试中应用的范 ...
- Java SSH 集成框架开发中的错误解决
记录一些Java 三大框架集成项目开发过程中发生的一些错误的解决,都是实际经验,记一下备忘.这些错误可以说比较诡异:有的目前尚未分析清楚原因,资料上也未说过. 一 找不到项目报404 一次在开发调试过 ...
- 将JavaScript集成到QML中
将JavaScript集成到QML中 将JavaScript集成到QML中 使用JavaScript表达式获取属性值 在QML中添加JavaScript函数 使用JavaScript文件 将JavaS ...
- python运行程序的快捷键_在Python集成开发环境中,可使用快捷键()运行程序。...
在Python集成开发环境中,可使用快捷键()运行程序. 更多相关问题 如何理解创新能力测试与创新能力的关系? 直埋线路与埋式电力电缆电压<35kv平行时最小间距为(). 放射性物品装卸作业时, ...
- 在Hibernate,EhCache,Quartz,DBCP和Spring中启用JMX
继续使用JMX的过程(请参阅: 人类JMX ),我们将学习如何在一些流行的框架中启用JMX支持(通常是统计和监视功能). 这些信息大部分都可以在项目的主页上找到,但是我决定在收集这些信息的同时,很少添 ...
- 三十七 Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中...
Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如 ...
- 【转】Castle中AdditionalInterfaces用法介绍
首先见下图(图一),其中FooController是一个没有实现任何Interface的空类.需要实现的效果是:通过FooController对象调用FooService的Do方法.设置这一不常见的场 ...
- 驱动框架8——将驱动集成到内核中
以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 十五.将驱动添加到内核中 1.驱动的存在形式 (1)野生,优势是方便调试开发,所以在开发阶段都是这种: (2)家养 ...
最新文章
- python新手项目-Python 的练手项目有哪些值得推荐?
- python 类属性排序_Python实现多属性排序的方法
- 《计量经济学》学习笔记之放宽基本假定的模型
- python字典的值可以是字典吗_python字典的值可以是字典吗
- 前端学习(305):bootstrap4之工具方法
- layui入门基础:资源汇总
- linux英伟达显卡偶尔加载失败,Ubuntu 8.10环境下出现NVIDIA显卡无法正常工作的解决方法...
- [BZOJ] 1614: [Usaco2007 Jan]Telephone Lines架设电话线
- 通过反汇编一个简单的C程序理解计算机是如何工作的
- js获取当前路径的url
- 淘宝商品数据爬取并分析数据
- linux扫描仪如何使用方法,怎样在linux下设置和使用扫描仪.doc
- WinSnap 截图工具绿色中文特别版
- js跳转到新标签打开PDF文件
- IDEA 修改单行的注释格式
- .NET MCV Swagger 安装和配置
- 如何在html里面搜索代码,怎样在网页里查找关键字
- 让我受益终生的六个字:道、法、术、器、志、势
- emlog轩少资源网模板,整站数据源码
- 如何将Chrome设置为默认浏览器
热门文章
- 关于Dreamweaver乱码问题的解决方案
- readelf和ldd分析elf文件
- CUDA Samples: 获取设备属性信息
- mysql邮箱配置文件_SQL-数据库邮箱配置
- imopen和bwmorph_MATLAB图像处理中的应用
- 是什么岗位_文案策划的岗位职责是什么?
- python发送邮件带附件_Python发送邮件(带附件)
- django model filter_Django框架使用流程(四)
- thinkphp 调用php文件上传,ThinkPHP实现带验证码的文件上传功能实例
- matlab整型和浮点的区别,技术帖 | 心理学MATLAB初学者教程--简单数据类型介绍(逻辑型数据,整型/浮点型数据,字符型)......