JBoss.orgCommunity Documentation

第 13 章 任务调度服务

13.1. 概述
13.2. 任务创建与管理
13.3. 应用设置

任务调度服务为开发者提供分布式定时服务,用来定时触发开发者的特定动作。应用开发者通过指定一个URL、时间表和相关参数来创建一个任务,平台将按照时间表的规则调用用户指定的URL。 任务调度服务通过执行HTTP请求定时触发应用执行特定的事务,HTTP请求支持GET/POST;一个任务最长执行时间为10分钟。

应用开发者如需要使用定时任务服务,则需要在应用包中"/src/main/resources"目录下创建timingTask.json文件。在文件中配置定义任务信息,整个配置文件内容为JSON数组对象。 应用安装到平台上,定时任务将自动创建与维护。timingTask.json文件中的任务将于平台上任务信息一致,如果文件为空,则以前的任务将被删除。 timingTask.json文件例子如下:

    [
	    {
	        "taskName": "taskName01", 
	        "cron": "20 * * * * * *", 
	        "url": "/app/aaa1", 
	        "des": "这是一个测试任务1", 
	        "method": "POST", 
	        "param": "a=11&b=22&c=33"
	    }, 
	    {
	        "taskName": "taskName02", 
	        "cron": "*/20 * * * * * *", 
	        "url": "/app/aaa2", 
	        "des": "这是一个测试任务2", 
	        "method": "GET", 
	        "param": ""
	    }
    ]
     

创建相关属性说明

taskName:任务标识,在整个应用中需要保证唯一性。且任务名称只能有字母和数字组成。必填。
cron:CRON表达式,定义任务执行的时间规则。必填。
 *       *        *         *         *       *        *
|   |   |   |   |   |   + - - - - Year(1970–2099)
|   |   |   |   |   + - - - - Day of week(0-6)
|   |   |   |   +   - - - - Month(1-12)
|   |   |   +   - - - -Day of Month(1-31)
|   |   + - - - - - -Hours(0-23)
|   + - - - - - -Minutes(0-59)
+ - - Seconds(0-59)
f1  f2  f3  f4  f5  f6  f7
        
*其中f1秒, f2 是表示分钟,f3 表示小时,f4 表示一个月份中的第几日,f5 表示月份,
 f6 表示一个星期中的第几天,f7表示年。 
*当 f1 为 * 时表示每秒钟都要执行 ,f2 为 * 时表示每分钟都要执行,其余类推 。
*当 f1 为 a-b 时表示从第 a 秒到第 b 秒这段时间内要执行,f2 为 a-b 时表示从第 a 分钟到第 b 
 分钟都要执行,其余类推 。
*当 f1 为 */n 时表示每 n 秒钟个时间间隔执行一次,f2 为 */n 表示每 n 分钟个时间间隔执行一次,其余类推 。
*当 f1 为 a, b, c,... 时表示第 a, b, c,... 秒要执行,f2 为 a, b, c,... 
 时表示第 a, b, c...个分钟要执行,其余类推
*week和day都有,则取交集。

url:用户要执行的任务的地址;即为应用任务的URL。例如:/aaa/bbb。必填。
des:任务描述。选填。
method:应用任务的URL执行方法,GET或者POST。必填。
param:调用应用URL时传入参数,只有当method为POST才生效,GET时忽略。      
       

当定时任务执行URL请求时,应用将被调用到,因此定时任务执行的URL需要排除身份、会话验证。 例如定时任务执行URL为:/AAA/BBB ;则需要在servletContext.xml将"/AAA/BBB"排除拦截

<!-- 定义 Web 拦截器 -->
<mvc:interceptors>  
 <mvc:interceptor>  
  <mvc:mapping path="/pc/**" />  
   <bean class="com.epicsaas.framework.tenant.TenantSessionInterceptor" >  
   <property name="pattern" value="(.*login.*)|(.*error.*)|(.*static.*)|
  (.*common.*)|(.*register.*)|(.*checkcode.*)|(.*topmanager.*)|(/AAA/BBB.*)"/>
   <property name="redirectURL" value="${baseComponentPath}"/>
  </bean>
 </mvc:interceptor>  
</mvc:interceptors>