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. 执行 update操作的时候有报错 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

    mysql> show full processlist; #查看问题的线程!!!! 找到异常进程的ID 然后kill 掉: mysql> kill xxxxxxx; #xxxxxx是ID ...

  2. ny714 Card Trick

    Card Trick 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 The magician shuffles a small pack of cards, holds ...

  3. IDEA开发工具常用快捷键总结

    Ctrl+Alt+V 快速补全变量名 Alt+Enter 自动修复 psvm 生成main方法 Ctrl+X 删除一行 Ctrl+D 复制一行 Ctrl+N 查找类 Ctrl+P 显示方法参数 Ctr ...

  4. Python 并行分布式框架 Celery

    Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分 ...

  5. git 分支管理 推送本地分支到远程分支等

    1.创建本地分支 local_branch git branch local_branch 2.创建本地分支local_branch 并切换到local_branch分支 git checkout - ...

  6. MFC和GTK的区别

    关键技术 http://blog.csdn.net/master_max/article/details/1540204 MFC和GTK的区别?? 1. 两者都是基于面向对象设计的.尽管MFC是用C+ ...

  7. I/O限制异步操作

    CLR非异步操作读取文件的过程图 非异步操作主要是因为每次请求硬件如(硬盘,网卡等)的线程都处于阻塞状态,导致以后的请求都需要重新创建新的线程.导致线程上下文的切换频繁. 异步IO操作主要是通过每次的 ...

  8. Servlet入门(第一个Servlet的Web程序)

    新建maven项目,注意项目的类型 project名为ServletExample 点击Finish.建立maven项目完毕例如以下 生成后的文件夹没有java源代码文件夹.依照maven的约定,还要 ...

  9. note,路况,计算

    note,路况,计算

  10. elasticsearch介绍

    elasticsearch是一个基于lucene所编写的分布式的搜索引擎,能够达到实时搜索,稳定高效. 我所了解的elasticsearch有下面这些特点 1 配置简单,对于初学者来说几乎是下载后零配 ...