# task-schedule-starter
**Repository Path**: zhaoyi_war/task-schedule-starter
## Basic Information
- **Project Name**: task-schedule-starter
- **Description**: 分布式调度组件
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-10-07
- **Last Updated**: 2021-12-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# task-schedule
基于zookeeper+quartz的分布式任务调度组件,非常小巧,使用简单,只需要引入jar包,不需要单独部署服务端。确保所有任务在集群中均匀分布,不重复,不遗漏的执行。
支持动态添加和删除任务。
## 功能概述
1. 基于zookeeper+quartz的分布任务调度系统,适合多任务的系统使用,合理分配资源。
2. 确保每个任务在集群节点均匀分布,不重复不遗漏的执行。
3. 单个任务节点故障时自动转移到其他任务节点继续执行。
4. 任务节点启动时必须保证zookeeper可用,任务节点运行期zookeeper集群不可用时任务节点保持可用前状态运行,zookeeper集群恢复正常运期。
5. 添加ip黑名单,过滤不需要执行任务的节点。
6. 提供简单管理页面、任务管理的接口。
7. 任务持久化。
## 模块架构



## 管理页面

访问URL:项目名称/taskSchedule/index,如果servlet3.x以下,请手动配置web.xml文件
```
TaskSchedule
HomeServlet
TaskSchedule
/taskSchedule/*
```
## 任务持久化脚本
```
-- ----------------------------
-- Table structure for `sys_task_schedule_job`
-- ----------------------------
DROP TABLE IF EXISTS `sys_task_schedule_job`;
CREATE TABLE `sys_task_schedule_job` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_name` varchar(255) DEFAULT NULL COMMENT '任务名称',
`job_status` varchar(1) DEFAULT NULL COMMENT '任务状态 0-停止,1-运行,2-删除',
`job_group` varchar(255) NOT NULL COMMENT '任务组',
`cron_expression` varchar(255) DEFAULT NULL COMMENT '表达式',
`bean_class` varchar(255) DEFAULT NULL COMMENT '类路径',
`spring_id` varchar(255) DEFAULT NULL COMMENT 'springId',
`method_name` varchar(255) DEFAULT NULL COMMENT '方法名',
`is_concurrent` varchar(1) DEFAULT NULL COMMENT '是否同步',
`description` varchar(500) DEFAULT NULL COMMENT '描述',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`prj_name` varchar(50) DEFAULT NULL COMMENT '工程名,与需要调度任务的工程名保持一致,如果部署在根目录则为空',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='任务调度配置表';
-- ----------------------------
-- Records of sys_task_schedule_job
-- ----------------------------
INSERT INTO `sys_task_schedule_job` VALUES ('12', 'job-test', '1', 'test', '0 0/10 * * * ?',
'com.secsbrain.live.mgr.job', '', 'gogogo', '1', '任务测试', '2017-01-10 17:05:06', '2017-01-12 17:07:34', 'live-mgr');
###如果应用的上下文没有子路径,就是直接通过ip:port访问。那么prj_name填BLANK,这样一来只支持一个应用了。
```
新建类,用于测试JOB:
```
package com.secsbrain.live.mgr.job;
/**
* 任务测试类
*
* @author zhaoyi
*/
public class JobTest {
public void gogogo(){
System.out.println("如果觉得快乐你就拍拍手");
}
}
```
zookeeper需3.4.8以上版本
## spring配置
```
true
```
注:如果觉得日志过多,可以屏蔽日志。
logback: ``````
log4j:```log4j.logger.com.secsbrain.frame.task=info```
还要把logback的隐式依赖给去掉:
```
com.github.tianzi94wob
frame-task
1.0.0.RELEASES
ch.qos.logback
logback-classic
ch.qos.logback
logback-core
```
此外,zookeeper的版本需要3.4.6以上
## 权限
接入方自己根据url来控制权限
## API
1. 动态设置任务
```
ConsoleManager.setScheduleTask(TaskDefine taskDefine);
```
2. 动态删除任务
```
ConsoleManager.delScheduleTask(String targetBean, String targetMethod);
```
3. 查询任务列表
```
ConsoleManager.queryScheduleTask();
```
## 持久化任务管理
注入bean:TaskScheduleJobService
1. 查询持久化任务列表
```
List queryTaskScheduleJobList(TaskScheduleJob taskScheduleJob);
```
2. 添加持久化任务
```
void addTask(TaskDefine taskDefine) throws Exception;
```
3. 通过任务ID更新,工程名、表达式、任务描述
```
void updateTask(TaskScheduleJob taskScheduleJob) throws Exception;
```
4. 逻辑删除任务
```
void deleteTask(Long jobId) throws Exception;
```
5. 查看任务实际运行的详情
```
TaskBean selectTaskDetail(Long jobId) throws Exception;
```
6. 更改任务状态
```
void changeStatus(Long jobId, String cmd) throws Exception;
```
用户按需使用接口开发持久化任务管理界面
## 不足
目前从新增任务到调度有1~2秒的延迟,请在实际业务场景开发中注意规避这个问题。
这个组件应用场景目前还比较单一,可能还会存在一些问题,希望大家一起来优化这个组件,为开源社区作贡献!