2.0 版本的 aop 框架中集成了 quartz 任务调度组件,该组件包含三部分:
1. 任务管理组件 : 用来启动和停止任务调度引擎,管理任务(新增,启动,修改,停止,挂起 / 继续,删除任务)
org.frameworkset.task.TaskService
2. 任务管理服务组件:按分组模式管理所有的 job 任务,并从相关的数据源加载作业任务
所有的任务管理组件都从抽象类 org.frameworkset.task. ScheduleService 继承
3. 任务配置文件:用来配置不同的作业服务和具体的作业 job 。对应的配置文件为:
/bbossaop/resources/org/frameworkset/task/quarts-task.xml
下面分别举例说明:
1.1 任务管理组件
任务管理控件:用来启动和停止任务调度引擎,管理任务(启动,修改,停止,删除任务)
org.frameworkset.task.TaskService
启动任务引擎
TaskService.getTaskService ().startService();
停止任务引擎
TaskService.getTaskService ().stopService();
删除任务
TaskService.getTaskService ().deleteJob(String jobname, String groupid)
暂停任务
TaskService.getTaskService ().pauseJob(String jobname, String groupid)
继续任务
TaskService.getTaskService (). resumeJob(String name, String groupid)
新增和启动任务
TaskService.getTaskService (). startExecuteJob(String groupid, SchedulejobInfo jobInfo)
更新任务
TaskService.getTaskService () .updateExecuteJob(String groupid, SchedulejobInfo jobInfo)
1.2 任务管理服务组件
所有的任务管理组件都从抽象类 org.frameworkset.task. ScheduleService 继承,定义了一下抽象方法:
public abstract void startService(Scheduler scheduler) throws ScheduleServiceException;
public abstract void startExecuteJob(Scheduler scheduler,SchedulejobInfo jobInfo);
public abstract void updateJob(Scheduler scheduler,SchedulejobInfo jobInfo);
public abstract void updateTriger(Scheduler scheduler,SchedulejobInfo jobInfo);
public abstract void updateJobAndTriger (Scheduler scheduler, SchedulejobInfo jobInfo);
系统中默认提供的任务管理组件
org.frameworkset.task.DefaultScheduleService ,用来加载系统中默认的静态的任务,可以配置多个作业任务
如果用户需要动态管理自己的作业任务,那么可以编写自己的 ScheduleService , 实现 org.frameworkset.task. ScheduleService 类的抽象方法:
public class DemoScheduleService extends ScheduleService {
@Override
public void startExecuteJob(Scheduler scheduler, SchedulejobInfo jobInfo) {
// 执行新定义的任务
}
@Override
public void startService(Scheduler scheduler)
throws ScheduleServiceException {
// 系统启动时,从资源库中获取所有的已经存在的任务,并加载到 scheduler 引擎中。
}
@Override
public void updateJob(Scheduler scheduler, SchedulejobInfo jobInfo) {
更新一个已经加载的作业任务
}
@Override
public void updateJobAndTriger(Scheduler scheduler, SchedulejobInfo jobInfo) {
更新作业任务,并触发任务的执行
}
@Override
public void updateTriger(Scheduler scheduler, SchedulejobInfo jobInfo) {
更新任务触发器
}
}
编写好自定义的任务服务组件后就可以将其配置到 quarts-task.xml 文件中了,例如:
< properties >
< property name = "taskconfig" enable = "true" >
< list >
< property name = "demo 任务执行器 " taskid = " DemoScheduleService "
class = "org.frameworkset.task. DemoScheduleService " used = "true" ></ property >
</ list >
</ property >
</ properties >
必须指定唯一的 taskid 属性, use 属性用来设置该任务组件是否生效。
1.3 任务管理配置文件
一个简单的配置文件
/bbossaop/resources/org/frameworkset/task/quarts-task.xml 的内容如下:
< properties >
< property name = "taskconfig" enable = "true" >
< list >
< property name = " 定时任务执行器 " taskid = "default"
class = "org.frameworkset.task.DefaultScheduleService" used = "true" >
<!--
可执行的任务项
属性说明:
name :任务项名称
id: 任务项标识
action: 具体的任务执行处理程序 , 实现 org.frameworkset.task.Execute 接口
cron_time : cron 格式的时间表达式,用来管理任务执行的生命周期,相关的规则请参照日期管理控件 quartz 的说明文档
used 是否使用
true 加载,缺省值
false 不加载
子元素说明:
Map 和 property : 设置任务执行的参数, name 标识参数名称, value 指定参数的值
-->
< list >
< property name = "workbroker" jobid = "workbroker"
class = "org.frameworkset.task.TestJob"
cronb_time = "0 56 14 * * ?" used = "true" >
< map >
< property name = "send_count" value = "2" />
</ map >
</ property >
</ list >
</ property >
</ list >
</ property >
</ properties >
说明:
org.frameworkset.task.DefaultScheduleService 是系统中默认提供的任务管理组件,用来加载系统中默认的静态的任务,可以配置多个,例如:
< property name = "workbroker" jobid = "workbroker"
action = "org.frameworkset.task.TestJob"
cronb_time = "0 56 14 * * ?" used = "true" >
< map >
< property name = "send_count" value = "2" />
</ map >
</ property >
属性说明:
Taskid :用来区分任务组,可以作为任务组的唯一标识,系统中通过 Taskid 和 jobid 来区分唯一的一个作业任务, TaskService 组件的很多方法中都有 groupid 和 jobname 两个参数, taskid 就对应于 groupid 参数, jobid 对应于 jobname 参数。
Name 任务的名称
Jobid 任务的标识
Action 任务执行的操作
cronb_time 任务执行的调度时间,具体需要参考 cronb_time 的语法。
use :区分任务是否生效
内嵌的节点
< map >
< property name = "send_count" value = "2" />
</ map >
用来指定任务执行时需要的参数。
需要特别说明的是 Action 类必须实现 org.frameworkset.task.Execute 接口,例如:
public class TestJob implements Execute, Serializable {
public void execute(Map parameters) {
System. out .println( "send_count = " +parameters.get( "send_count" ));
}
}
如果用户需要动态管理自己的作业任务,那么可以实现 org.frameworkset.task. ScheduleService 类