11.35 如何编写自动任务?
自动任务调度是应用服务器的基本功能之一,自动任务主要是为了解决一些与用户交互无关,但与时间、日期相关的一些周期性任务,此类任务的特点是数据量大、无需人工干预、有规律,遇到这样的任务都可以考虑使用自动任务。
所在组件:IBeamMDAACore
名称空间:IBeam.MDAA.Objects (业务对象)
用法举例:
在IBeamMDAA框架中开发自动任务比较简单,用户无需关心与任务无关的调度、配置等问题,只需遵守两个简单的原则即可:
1、任何自动任务都必须实现 IAutoTask 接口,IAutoTask 接口定义如下:
public interface IAutoTask
{
void Execute(Dictionary<string,string> context);
}
Execute方法是任务运行方法,context 是任务运行初始参数,与自动任务相关,由开发者自己定义。
2、自动任务必须打上自动任务属性标签,任务调度参数是可选的,示例代码如下:
TaskType = TaskType.单实例竞争任务, SchedulerParameterName = "ScheduleCycle", Description = "同步会计科目名称与当事人、商品名称保持同步")]
[IBeamAutoTaskParameter(Name = "ScheduleCycle", Value = "0 0 1,13 ? * *", CanNull = true, FriendlyName = "服务调度周期,每天1点和13点各执行一次")]
public class SynchronizeAccountSubjectNameForPartyAndProducts : IAutoTask
{
#region IAutoTask 成员
public void Execute(System.Collections.Generic.Dictionary<string, string> context)
{
ILog log = LogManager.GetLogger(this.GetType());
try
{
log.Info("开始同步会计科目名称与当事人、商品名称保持同步");
if (AccountSubject.Synchronize())
{
log.Info("同步会计科目名称与当事人、商品名称保持同步成功");
}
else
{
log.Info("同步会计科目名称与当事人、商品名称保持同步失败");
}
}
catch (Exception ee)
{
log.Info("同步会计科目名称与当事人、商品名称保持同步时出错:"+ee.Message);
}
}
#endregion
}
IBeamAutoTask属性列表:
序号 | 属性名称 | 含义 |
1 | ID | 任务编号 |
2 | Name | 任务名称 |
3 | TaskType | 任务类型 |
4 | Description | 自动任务工作内容概述 |
5 | SchedulerParameterName | 自动任务调度参数名称,在参数列表中查找,如果此属性值为空或不指定,则任务在应用服务器启动时运行一次,否则按参数指定的调度周期运行。参数格式参考Cron表达式规范。 |
IBeamAutoTaskParameter属性列表:
序号 | 属性名称 | 含义 |
1 | Name | 参数名称,在同一任务中不允许重复 |
2 | Value | 参数值 |
3 | CanNull | 参数是否可以为空 |
4 | FriendlyName | 参数友好名称说明 |
通过以上示例代码,是不是觉得开发一个自动任务很简单呢?的确,IBeamMDAA的目标就是为了解决所有复杂、繁琐、重复的工作,任何人看完示例后都可以在10分钟内创建自动任务。