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. 游戏开发tips之RTTI(1)

    首先说明标题的含义,怎么感觉就和定义一种语言一样,需要有一个规约呢..... 标题定义如下:游戏开发tip之+内容+(总tips的第几篇) 扩展如下:内容(一,二,三.....) 新手可怜,大神每一句 ...

  2. eclipse 项目中的java文件没有在WEB-INF目录下的classes中 生成相对应的编译后的类

    1.首先确定project->Build Automatically是否勾选上: 2.执行完第一步之后测试一下看是否能编译,如果还是不能,则进行手动编译:  3,进入clean对话框,选择Cle ...

  3. 终端模拟工具:Xshell 4

    终端模拟工具:Xshell 4 2016-09-20 目录 1 安装 2 配置 3 命令 Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Window ...

  4. 【转】Java对日期Date类进行加减运算,年份加减,月份加减

    import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Date ...

  5. C#中的委托应该定义在哪里

    专业回答 千锋教育 中国移动互联网研发培训领导品牌 2016-01-08 14:28 需求情况而定,一般定义在与类定义平级部分,且用public修饰,便于外部的调用. 若定义于类的内部,则必须通过调用 ...

  6. 基于jquery网站左侧下拉菜单

    网站左侧下拉菜单jQuery代码.这是一款蓝色风格的适合做后台下拉菜单代码.效果图如下: 在线预览   源码下载 实现的代码: <div class="container"& ...

  7. tmpx75 I2C 温度传感器驱动程序添加

    在kernel 内 make menuconfig 加入相关选项 Device Drivers ---> <*> Hardware Monitoring support ---> ...

  8. javascript商务通

    //左侧就医服务新 document.write("<style type='text/css'>"); document.write(".left_swt{ ...

  9. 轻量级ORM框架Dapper应用六:Dapper支持存储过程

    在Entity Framework中讲解了EF如何支持存储过程,同样,Dapper也支持存储过程,只需要在Query()方法的CommandType中标记使用的是存储过程就可以了.在Users表上面创 ...

  10. java-事务-案例

    项目结构: 数据库: /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.5.53 : Database - threadlocal ************** ...