NopCommerce的定时任务分析和应用
NOP的定时任务也是群里听群友听说,我很少在WEB端做定时任务,所以尝鲜下,看看效果怎么样.
主要涉及到下面几个类和配置文件配置:
web.config
<configSections>
<section name="NopConfig" type="StudyCommerceTimerTask.TimerTask.NopConfig,StudyCommerceTimerTask" requirePermission="false"/> <!--请求权限,完全受控制-->
</configSections>
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=10.1.0.103;Initial Catalog=DHGDP;uid=sa;pwd=dahua123"/>
</connectionStrings> <NopConfig>
<SqlServer ConnectionStringName="ConnectionString"/>
<Cache Enabled="True"/>
<ScheduleTasks>
<!--1分钟执行一次-->
<Thread seconds="">
<task name="AddDatabase" type="StudyCommerceTimerTask.TimerTask.ThreadTask.AddBase,StudyCommerceTimerTask" enabled="true" stopOnError="false"/>
</Thread>
</ScheduleTasks>
</NopConfig>
其中NopConfig这个节点,里有很多配置。需要注意下:
1.SqlServer 是读取ConnectionString里面的配置链接字符串
2.Cache 是否开启缓存,开启就会从缓存读取,反之亦然
3.enabled是否对当前任务开启执行
4.stopOnError 是否遇见错误,还继续执行
从上面可以看出来,这个计划任务。一个线程可以执行多个任务。 可以执行多个线程。
ITask=>接口类:
这个是最重要的接口,所有的任务都通过实现这个接口,实现反转,开启任务执行。有点像IOC的味道
Task=>任务执行类
切记这个类不是对ITask类的实现类,而是对当前配置的节点的任务进行获取,并进行反射执行和调用里面配置的节点类进行执行任务
public ITask createTask()
{
if (this.Enabled && (this._task == null))
{
if (this._taskType != null)
{
this._task = Activator.CreateInstance(this._taskType) as ITask;
}
}
return this._task;
} public void Execute()
{
this._isRunning = true;
try
{
var task = this.createTask();
if (task != null)
{
this._lastStarted = DateTime.Now;
task.Execute(this._configNode);
this._lastEnd = this._lastSuccess = DateTime.Now;
}
}
catch (Exception exception)
{
this._enabled = !this.StopOnError;
this._lastEnd = DateTime.Now; //throw;
}
this._isRunning = false;
}
上面2个方法,一个是反射 一个是执行反射并更改当前线程任务在执行
TaskThread=>任务线程类
对配置的里面的所有任务加载到线程中,并开始执行
TaskManager=>任务线管理的任务管理
对当前所有的线程任务进行初始化加载和依次执行
Global.aspx.cs=>应用程序启动加载计划任务
StudyCommerceTimerTask.TimerTask.NopConfig.Init();
if (ConnectionIsSet())//如果数据库有链接配置
{
StudyCommerceTimerTask.TimerTask.TaskManager.Instance.Initialize(StudyCommerceTimerTask.TimerTask.NopConfig.ScheduleTasks);
StudyCommerceTimerTask.TimerTask.TaskManager.Instance.Start();
}
/// <summary>
/// 判断是否节点是否有链接字符串
/// </summary>
/// <returns></returns>
public static bool ConnectionIsSet()
{
return !string.IsNullOrEmpty(StudyCommerceTimerTask.TimerTask.NopConfig.ConnectionString);
}
我大致的了解就是,这个计划任务就是=>Nopconfig=>TaskManager=>TaskThread=>Task=>ITask=>实现的接口类
利用的是Timer这个计时器进行委托方法进行调用。
里面有3个要注意:
1.加载节点利用的是IConfigurationSectionHandler和ConfigurationManager.GetSection("NopConfig");
2.反射这个就不多说了 this._task = Activator.CreateInstance(this._taskType) as ITask;
3.Timer 计时器new Timer(new TimerCallback(TimerHandler),null,this.Interval,this.Interval);
源代码下载:
NopCommerce的定时任务分析和应用的更多相关文章
- nopcommerce商城系统--开发者常遇问题清单
原址:http://www.nopcommerce.com/docs/74/frequently-asked-development-questions.aspx 以下是开发者常见问题的清单.也介绍了 ...
- druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索
最近项目中有个定时任务的需求,定时检查mysql数据与etcd数据的一致性,具体实现细节就不说了,今天要说的就是实现过程中遇到了druid抛出的异常,以及解决的过程 异常 异常详细信息 五月 05, ...
- 应急响应系列之OA被入侵挖矿分析报告
一 基本情况 1.1 简要 此事件是去年应急处置时完成的报告,距今有半年时间了.一直存在电脑里,最近准备完善应急响应中遇到的各类安全事件,这篇文章作为这一系列的开端. 对于 Linux 安全检查,个 ...
- 只写104行代码!在nopCommerce中如何实现自动生成网站地图
表告诉我说你不知道nopCommerce是什么.它是目前.NET中最流行的完全开源网上商城,由俄罗斯的团队在2008年开始立项一直开发到现在已经是3.3版本了.代码目前托管在codeplex上,有兴趣 ...
- SQLServer2005创建定时作业任务
SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...
- 定时Job在IIS中潜在危险-IIS 定期回收
引言 有时我们会在IIS中启用一些定时服务,但是你必须清楚IIS会定期回收Asp.net的应用程序的.首先来看IIS啥时候回收APPDomain. APPDomain 回收时机 There are ...
- [转]NopCommerce How to add a menu item into the administration area from a plugin
本文转自:http://docs.nopcommerce.com/display/nc/How+to+code+my+own+shipping+rate+computation+method Go t ...
- [转]nopCommerce Widgets and How to Create One
本文转自:https://dzone.com/articles/what-are-nopcommerce-widgets-and-how-to-create-one A widget is a sta ...
- 客服小妹是如何泡到手的——C#定时提醒·语音录制·语音播放·文件转录Demo源码——倾情奉献!
一.需求提出 客服小妹跟我说,每天要统计新加好友数,得先记下昨天的数目,然后查看今天的数目,还要相减,打字,记录——好麻烦! 又说,客户多的时候,忙起这头忘了那头,文字记录备忘又太费劲! 我说,赐你一 ...
随机推荐
- angular学习笔记(九)-css类和样式2
在上一个例子中,元素的类名使用拼接的方法,这样,类名中就不得不带有true或false,并且不易维护,所以,angular使用ng-class属性来控制元素的类名: 我们来看一个小例子,点击error ...
- ny20 吝啬的国度
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...
- Oracle PLSQL Demo - 18.02.管道function[查询零散的字段组成list管道返回] [字段必须对上]
--PACKAGE CREATE OR REPLACE PACKAGE test_141215 is TYPE type_ref IS record( ENAME ), SAL )); TYPE t_ ...
- Linux下crontab内环境变量与Shell环境变量的关系【转】
crontab,总是不会缺省的从用户profile文件中读取环境变量参数 经常导致在手工执行某个脚本时是成功的,但是到crontab中试图执行时就会报错. 解决办法如下: 方法一:在shell文件中获 ...
- C++笔记 2
1.程序由函数组成,函数只完成自己特定的功能即可 把函数声明写在头文件里(想使用函数时,可直接导入头文件,调用函数),把函数实现写在".cc"文件中 把多个".c ...
- CodeIgniter在nginx下404 not found
server { listen ; server_name test.platform; charset utf8; root /data/www/platform/trunk; location / ...
- kettle7.1无法从Mongo中读取数据
今天使用kettle读取mongo数据库时,刚开始一直无法读取数据: 在配置项中偶然选择了一个nearest然后成功了,麻蛋. 然后百度查询了下Read Reference是干嘛的,原来是读取源的模式 ...
- asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录
情景: 某页面未登录下可以访问,但具体操作时发现未登录就弹出登录窗,待完成登录后继续操作. 当登录成功,前端继续操作(post后端接口)时发现以下错误: 提供的防伪标记适用于用户“”,但当前 ...
- MVC教程二:从控制器中获取URL的值
一.从控制器中获取URL的值有三种方式: 1.使用Request.QueryString[] 例如: string value = Request.QueryString["BookId&q ...
- JavaScript 关键字快速匹配
来源: http://www.cnblogs.com/index-html/archive/2013/04/17/js_keyword_match.html http://www.etherdream ...