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);

源代码下载:

StudyCommerceTimerTask.zip

NopCommerce的定时任务分析和应用的更多相关文章

  1. nopcommerce商城系统--开发者常遇问题清单

    原址:http://www.nopcommerce.com/docs/74/frequently-asked-development-questions.aspx 以下是开发者常见问题的清单.也介绍了 ...

  2. druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索

    最近项目中有个定时任务的需求,定时检查mysql数据与etcd数据的一致性,具体实现细节就不说了,今天要说的就是实现过程中遇到了druid抛出的异常,以及解决的过程 异常 异常详细信息 五月 05, ...

  3. 应急响应系列之OA被入侵挖矿分析报告

    一 基本情况 1.1  简要 此事件是去年应急处置时完成的报告,距今有半年时间了.一直存在电脑里,最近准备完善应急响应中遇到的各类安全事件,这篇文章作为这一系列的开端. 对于 Linux 安全检查,个 ...

  4. 只写104行代码!在nopCommerce中如何实现自动生成网站地图

    表告诉我说你不知道nopCommerce是什么.它是目前.NET中最流行的完全开源网上商城,由俄罗斯的团队在2008年开始立项一直开发到现在已经是3.3版本了.代码目前托管在codeplex上,有兴趣 ...

  5. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  6. 定时Job在IIS中潜在危险-IIS 定期回收

    引言 有时我们会在IIS中启用一些定时服务,但是你必须清楚IIS会定期回收Asp.net的应用程序的.首先来看IIS啥时候回收APPDomain.   APPDomain 回收时机 There are ...

  7. [转]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 ...

  8. [转]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 ...

  9. 客服小妹是如何泡到手的——C#定时提醒·语音录制·语音播放·文件转录Demo源码——倾情奉献!

    一.需求提出 客服小妹跟我说,每天要统计新加好友数,得先记下昨天的数目,然后查看今天的数目,还要相减,打字,记录——好麻烦! 又说,客户多的时候,忙起这头忘了那头,文字记录备忘又太费劲! 我说,赐你一 ...

随机推荐

  1. angular学习笔记(九)-css类和样式2

    在上一个例子中,元素的类名使用拼接的方法,这样,类名中就不得不带有true或false,并且不易维护,所以,angular使用ng-class属性来控制元素的类名: 我们来看一个小例子,点击error ...

  2. ny20 吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...

  3. Oracle PLSQL Demo - 18.02.管道function[查询零散的字段组成list管道返回] [字段必须对上]

    --PACKAGE CREATE OR REPLACE PACKAGE test_141215 is TYPE type_ref IS record( ENAME ), SAL )); TYPE t_ ...

  4. Linux下crontab内环境变量与Shell环境变量的关系【转】

    crontab,总是不会缺省的从用户profile文件中读取环境变量参数 经常导致在手工执行某个脚本时是成功的,但是到crontab中试图执行时就会报错. 解决办法如下: 方法一:在shell文件中获 ...

  5. C++笔记 2

    1.程序由函数组成,函数只完成自己特定的功能即可   把函数声明写在头文件里(想使用函数时,可直接导入头文件,调用函数),把函数实现写在".cc"文件中   把多个".c ...

  6. CodeIgniter在nginx下404 not found

    server { listen ; server_name test.platform; charset utf8; root /data/www/platform/trunk; location / ...

  7. kettle7.1无法从Mongo中读取数据

    今天使用kettle读取mongo数据库时,刚开始一直无法读取数据: 在配置项中偶然选择了一个nearest然后成功了,麻蛋. 然后百度查询了下Read Reference是干嘛的,原来是读取源的模式 ...

  8. asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录

    情景:    某页面未登录下可以访问,但具体操作时发现未登录就弹出登录窗,待完成登录后继续操作. 当登录成功,前端继续操作(post后端接口)时发现以下错误:   提供的防伪标记适用于用户“”,但当前 ...

  9. MVC教程二:从控制器中获取URL的值

    一.从控制器中获取URL的值有三种方式: 1.使用Request.QueryString[] 例如: string value = Request.QueryString["BookId&q ...

  10. JavaScript 关键字快速匹配

    来源: http://www.cnblogs.com/index-html/archive/2013/04/17/js_keyword_match.html http://www.etherdream ...