1、初步设计的应用任务结构。jobkey设计为前缀“app_job-”+id. jobkey=triggerkey
任务管理表 折叠原码
| DROP TABLE IF EXISTS `APPLICATION_TASK`; CREATE TABLE `APPLICATION_TASK` ( `id` bigint(10) NOT NULL AUTO_INCREMENT COMMENT 'id', `job_type` varchar(20) NOT NULL COMMENT 'cron、simple两种模式', `task_name` varchar(50) NOT NULL COMMENT '应用任务名称', `task_type` varchar(200) NOT NULL COMMENT '任务类型,可以直接使用TriggerMessage中的TriggerEvent定义的。需代码维护与Verticle的address的对应关系', `is_deleted` TINYINT(3) NOT NULL COMMENT '删除标识', `status` INT NOT NULL COMMENT '启停标识', `param_json` VARCHAR(500) COMMENT '不同任务需要的参数json,如数据归档需要制定数据表id', `ip` VARCHAR(20) NOT NULL COMMENT '执行任务的ip', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
任务记录表 折叠原码
| DROP TABLE IF EXISTS `TASK_LOG`; CREATE TABLE `TASK_LOG` ( `id` bigint(10) NOT NULL AUTO_INCREMENT COMMENT 'id', `task_id` bigint(10) NOT NULL COMMENT 'task id', `task_name` varchar(50) NOT NULL COMMENT '应用任务名称', `task_type` varchar(200) NOT NULL COMMENT '任务类型,比如归档任务为DATAFILER', `start_time` DATETIME NOT NULL COMMENT '任务开始时间', `end_time` DATETIME NOT NULL COMMENT '任务结束时间', `execute_status` INT COMMENT '执行状态:成功、异常', `fail_message` VARCHAR(500) COMMENT '异常信息', `ip` VARCHAR(20) NOT NULL COMMENT '执行任务的ip', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
2、参数介绍。
1)、task_type.任务类型。对于开发好的不同后端逻辑的任务。比如:任务归档的任务类型为DATAFILER.task_type要与对应job的实现对应。
TaskType示例 折叠原码
| public enum TaskType {
DATAFILER(DataFilerJob.class); Class<? extends AbstractJob> jobClass; TaskType(Class<? extends AbstractJob> jobClass){
this.jobClass = jobClass; } public Class<? extends AbstractJob> getJobClass() {
return jobClass; } } |
上面的TaskType中用到了自定义Job。Job初步设计如下:
AbstractJob中统一完成落库操作 折叠原码
| package com.back.task; import com.back.model.AppTask; /** * 这里思考对于任务记录操作能否统一处理 * 如果能够统一处理,代表也可以在这里加控制。做一个是否持久化任务痕迹的配置 * @author Administrator * */ public abstract class AbstractJob implements Job {
private AppTask task; private TaskLog taskLog; public AbstractJob(AppTask task){
this.task = task; } /** <
|