现在的位置: 首页 > 综合 > 正文

11.35 如何编写自动任务?

2012年07月23日 ⁄ 综合 ⁄ 共 1938字 ⁄ 字号 评论关闭

自动任务调度是应用服务器的基本功能之一,自动任务主要是为了解决一些与用户交互无关,但与时间、日期相关的一些周期性任务,此类任务的特点是数据量大、无需人工干预、有规律,遇到这样的任务都可以考虑使用自动任务。

 

所在组件:IBeamMDAACore

名称空间:IBeam.MDAA.Objects (业务对象)

用法举例:

       IBeamMDAA框架中开发自动任务比较简单,用户无需关心与任务无关的调度、配置等问题,只需遵守两个简单的原则即可:

              1、任何自动任务都必须实现 IAutoTask 接口,IAutoTask 接口定义如下:

       public interface IAutoTask

    {

        void Execute(Dictionary<string,string> context);

}

 

Execute方法是任务运行方法,context 是任务运行初始参数,与自动任务相关,由开发者自己定义。

 

2、自动任务必须打上自动任务属性标签,任务调度参数是可选的,示例代码如下:

 

 

[IBeamAutoTask(ID = "511A686B-9593-4A4B-98AD-CD5AA8865D19", Name = "SynchronizeAccountSubjectName",
        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<stringstring> 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分钟内创建自动任务。

抱歉!评论已关闭.