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源码——倾情奉献!
一.需求提出 客服小妹跟我说,每天要统计新加好友数,得先记下昨天的数目,然后查看今天的数目,还要相减,打字,记录——好麻烦! 又说,客户多的时候,忙起这头忘了那头,文字记录备忘又太费劲! 我说,赐你一 ...
随机推荐
- 什么是WMS系统 金蝶仓库条码管理WMS系统介绍
汉码盘点机-专注于傻瓜式的仓库条码管理系统,是当前出入库工作效率最高.数据最准确的仓库管理办法. "WMS,即q=%E4%BB%93%E5%BA%93%E7%AE%A1%E7%90%86%E ...
- 每日英语:Why Food Companies Are Fascinated by the Way We Eat
Are you a cruncher? Or a 'smoosher'? cruncher:咬嚼者,咬碎 Some people crave the perfectly crispy crunch o ...
- 李洪强漫谈iOS开发[C语言-054]-函数
// // main.c // 02 翻译数字的优化 // // Created by vic fan on 2017/6/4. // Copyright © 2017年 李洪强. All r ...
- gradle本地文件仓库 (52.6.5. Flat directory repository)
If you want to use a (flat) filesystem directory as a repository, simply type: Example 52.32. Flat r ...
- 搞清tomcat中的编解码
http://www.xuebuyuan.com/1287083.html *********************************** 经常会被乱码问题搅得头晕脑胀.事实上,乱码问题涉及的 ...
- mysql 修改表的字符集
修改表的字符集 88down voteaccepted If you want to change the table default character set and all character ...
- C++使用ocilib访问oracle数据库
引用: http://blog.csdn.net/u011311985/article/details/51221898 测试程序我放到 http://download.csdn.NET/detail ...
- tcp与http的区别
1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. ...
- warning: ignoring option PermSize=256m; support was removed in 8.0
使用jdk1.8后,控制台出现下面提示信息: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=256m; sup ...
- spingboot集成jpa(二)
一.使用单元测试 单元测试在每个项目环境中必不可少,springboot中如何使用单元测试 在src/test/java中新建测试类DemoApplicationTest.java 项目结构: De ...