将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
收藏
推荐专栏更多

大数据时代的微服务之路
共18章 | 纯洁微笑
¥51.00 669人订阅

自动化运维开发新概念
共20章 | 抚琴煮酒
¥51.00 430人订阅
猜你喜欢


扫一扫,领取大礼包
0

转载于:https://blog.51cto.com/shanyou/73974
相关文章:

《评人工智能如何走向新阶段》后记(再续10)
本文由AI科技大本营下载自视觉中国106.百度自研的飞桨(Paddle paddle)框架是中国自研的首个开源产业极人工智能深度学习框架,目前飞桨已累计服务150多万开发者,在定制化训练平台上企业用户超过6.5万,发布了16.9万模型&…

水管工游戏 (深搜)
水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可。 代码如下: #include<stdio.h> int a[51][51]; int book[51][51],n,m,flag0,top…

PE文件和COFF文件格式分析——导出表的应用——一种插件模型
可能在很多人想想中,只有DLL才有导出表,而Exe不应该有导出表。而在《PE文件和COFF文件格式分析——导出表》中,我却避开了这个话题。我就是想在本文中讨论下载Exe中存在导出表的场景。(转载请指明出于breaksoftware的csdn博客&…

IBatis.Net学习笔记九--动态选择Dao的设计分析
在IBatis.Net中可以通过配置文件动态选择数据库、动态选择Dao对象。Dao对象也就是操作数据库的类,通过配置文件我们可以选择DataMapper的方式、Ado的方式、NHibernet的方式以前其他第三方的方式来操作数据库。有利于系统的灵活性和可扩展性。通过分析动态选择Dao的设…
Pytorch和Tensorflow,谁会笑到最后?
作者 | 土豆变成泥来源 | 知秋路(ID:gh_4a538bd95663)【导读】作为谷歌tensorflow某项目的Contributor,已经迅速弃坑转向Pytorch。目前Tensorflow还没有被Pytorch比下去,但之后极大概率被比下去。01 在学术界Pytorch已经超越Tenso…

HTTP请求的过程
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同…

JSTL+EL表达式方法获取Oracle的Clob字段内容
我们在页面获得数据的时候一般的类型还是很好获得的,但是一遇到Clob类型就比较麻烦,最常用的方法是用一个流将其读取出来.使用MVC框架的时候这些都是无所谓的事情,因为反正是写在java类中怎么写都行,可是不使用MVC框架,使用jsp页面JSTL的sql标签去读取数据库的数据这种方式就麻…
通向人工智能产业落地化的道路在哪?
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)世事浮云,白云苍狗,转眼间关于人工智能的研究已历经两个世纪。在研究者和践行者的不懈努力之下,如今人工智能应用已遍地可见,无论是繁华都市还是偏远小镇&…

PE文件和COFF文件格式分析——导出表的应用——通过导出表隐性加载DLL
通过导出表隐性加载DLL?导出表?加载DLL?还隐性?是的。如果觉得不可思议,可以先看《PE文件和COFF文件格式分析——导出表》中关于“导出地址表”的详细介绍。(转载请指明出于breaksoftware的csdn博客&#x…

系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常...
现象:spring加载配置文件applicationContext.xml出错,抛出nested exception is og.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 47; cvc-elt.1: 找不到元素 beans 的声明r的异常信息。 造成该异常原因有两种:第一,配置文件头部配置的xsd版…
DllMain中不当操作导致死锁问题的分析--死锁介绍
最近在网上看到一些关于在DllMain中不当操作导致死锁的问题,也没找到比较确切的解答,这极大吸引了我研究这个问题的兴趣。我花了一点时间研究了下,正好也趁机研究了下进程对DllMain的调用规律。因为整个研究篇幅比较长,我觉得还是…
XGBoost缺失值引发的问题及其深度分析 | CSDN博文精选
作者 | 兆军(美团配送事业部算法平台团队技术专家)来源 | 美团技术团队(*点击阅读原文,查看美团技术团队更多文章)背景XGBoost模型作为机器学习中的一大“杀器”,被广泛应用于数据科学竞赛和工业领域&#…

什么是CPI指数和GDP
即消费者物价指数(Consumer Price Index),英文缩写为CPI,是反映与居民生活有关的产品及劳务价格统计出来的物价变动指标,通常作为观察通货膨胀水平的重要指标。如果消费者物价指数升幅过大,表明通胀已经成为经济不稳定因素&#x…

The Ultimate Guide To iPhone Resolutions
2019独角兽企业重金招聘Python工程师标准>>> ios 屏幕尺寸 像素 等说明 转载于:https://my.oschina.net/starmier/blog/467271
DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析
不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字。是的!这就是系统给我们提供的控制程序最开始的地方&…
力挺Python!同是程序员,为啥同事年前就实现了财务自由?
人红是非多,最近Python就遇到了这样的问题。与技术社区上一片「形势大好」对比鲜明的是,国内技术圈却一直存在对Python,「力挺」和「吃瓜」两派阵营,针锋相对,那么,Python到底有没有用,真相究竟…

C# 判断远程文件是否存在
#region 判断远程文件是否存在/// <summary>/// 判断远程文件是否存在/// </summary>/// <param name"fileUrl"></param>/// <returns></returns>public static bool RemoteFileExists(string fileUrl){HttpWebRequest re null…

DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子
有了前面两节的基础,我们现在切入正题:研究下DllMain为什么会因为不当操作导致死锁的问题。首先我们看一段比较经典的“DllMain中死锁”代码。(转载请指明出于breaksoftware的csdn博客) //主线程中 HMODULE h LoadLibraryA(strD…
性能超FPN!北大、阿里等提多层特征金字塔网络
作者 | Qijie Zhao等编译 | 李杰出品 | AI科技大本营(ID:rgznai100)特征金字塔网络具有处理不同物体尺度变化的能力,因此被广泛应用到one-stage目标检测网络(如DSSD,RetinaNet,RefineDet)和two-…

什么是WIFI
WIFI全称Wireless Fidelity,又称802.11b标准,它的最大优点就是传输速度较高,可以达到11Mbps,另外它的有效距离也很长,同时也与已有的各种802.11DSSS设备兼容。 WIFI是由AP(Access Point)和无线网卡组成的无线网络。…
Android入门——电话拨号器和4种点击事件
关于HelloWorld为,电话拨号程序还AndroidA入门demo,从这个样例我们要理清楚做安卓项目的思路。大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1. 理解需求: *一个文本框——用来接收电话号码 *一个button——用来触发事…

DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子2
本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论,调试对象是文中刚开始那个例子。(转载请指明出于breaksoftware的csdn博客) 1 g 让程序运行起来 2 ctrlbreak 中断程序 3 ~ 查看…
从入门到深入:移动平台模型裁剪与优化的技术探索与工程实践
可以看到,通过机器学习技术,软件或服务的功能和体验得到了质的提升。比如,我们甚至可以通过启发式引擎智能地预测并调节云计算分布式系统的节点压力,以此改善服务的弹性和稳定性,这是多么美妙。而对移动平台来说&#…

我在不炎熱也不抑鬱的秋天,依然不抽煙
写过几次电影的观后感,挺过瘾.最近看到my little airport的那张新唱片,再也没有办法保持沉默了 为什么人家的唱片名都起的和小说一样,难得是为了证明听歌的人们都不喜欢动笔吗? 于是,我建了个类别,叫 我也会听歌.很明显,这里面会塞一些和歌相关的东西 这是第一篇

ubuntu安装redis的方法以及PHP安装redis扩展、CI框架sess使用redis的方法
为什么80%的码农都做不了架构师?>>> 再一次被网上那些教程误导后决定自己写一个。真心被那些奇怪的教程误导了好几次,之前研究其它东西的时候也是。蛋疼啊。 安装redis 直接用apt-get命令即可 sudo apt-get install redis-server 安装的时候…

浅谈数据库设计技巧
说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,…
避免神经网络过拟合的5种技术(附链接) | CSDN博文精选
作者 | Abhinav Sagar翻译 | 陈超校对 | 王琦来源 | 数据派THU(ID:DatapiTHU)(*点击阅读原文,查看作者更多精彩文章)本文介绍了5种在训练神经网络中避免过拟合的技术。 最近一年我一直致力于深度学习领域。这段时间里,我使用过很多神经网络&a…

DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
前几篇文章一直没有在源码级证明:DllMain在收到DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH时会进入临界区。这个论证非常重要,因为它是使其他线程不能进入临界区从而导致死锁的关键。我构造了在DLL被映射到进程地址空间的场景,请看死锁时加载DL…

LinearLayout增加divider分割线
2019独角兽企业重金招聘Python工程师标准>>> 在android3.0及后面的版本在LinearLayout里增加了个分割线 android:divider"drawable/shape"<!--分割线图片--> android:showDividers"middle|beginning|end" <!--分割线位置--> 分割线…

JAVA游戏编程之二----j2me MIDlet 手机游戏入门开发--贪吃蛇
作者:雷神 QQ:38929568 QQ群:28048051JAVA游戏编程(满) 28047782(将满) 与前一款扫雷比较,这个游戏多了一个 类,用来显示动画,也是蛇要吃的物品类, 也有了代码…
Ctrl+Enter 发布
发布
取消