# 功能说明
- 支持分布式保证单节点执行(按节点平均分配job)
- 支持failvoer,自动切换故障节点
- 支持多节点下并行计算
- 支持无注册中心单机模式
- 支持自定义重试策略
- 支持配置持久化(启动加载、变更保存)
- 直接监控、停止/运行、执行等操作API
# 使用说明
# 添加依赖
<dependency>
<groupId>com.mendmix</groupId>
<artifactId>mendmix-scheduler</artifactId>
<version>[最新版本]</version>
</dependency>
# 定时任务开发
@Service
@ScheduleConf(cronExpr="0/30 * * * * ?",executeOnStarted = false)
public class DemoTask extends AbstractJob{
int count = 1;
@Override
public void doJob(JobContext context) throws Exception {
//do something
}
@Override
public boolean parallelEnabled() {
// 分布式下开启并行计算返回true
return false;
}
}
ScheduleConf
注解说明:
- cronExpr:时间表达式
- retries:重试次数,默认:0
- logging:是否记录运行日志,默认:false,需要配置日志组件使用
- executeOnStarted:启动时是否执行一次
# 定时任务注册
# spring XML方式
<!-- 注册中心(集群管理) -->
<bean id="jobRegistry" class="com.mendmix.scheduler.registry.ZkJobRegistry">
<property name="zkServers" value="localhost:2181" />
</bean>
<bean class="com.mendmix.scheduler.SchedulerFactoryBeanWrapper" >
<!-- 确保每个应用groupName唯一 -->
<property name="groupName" value="demo" />
<property name="registry" ref="jobRegistry" />
<property name="scanPackages" value="com.mendmix.test.sch" />
<!--持久化处理器 ,可选-->
<property name="persistHandler">
<bean class="com.mendmix.test.sch.DbConfigPersistHandler" />
</property>
</bean>
单机运行(不需要zookeeper)使用注册中心实现类
com.mendmix.scheduler.registry.NullJobRegistry
即可
# springboot方式
# 添加依赖
<dependency>
<groupId>com.mendmix</groupId>
<artifactId>mendmix-springcloud-support</artifactId>
<version>[最新版本]</version>
</dependency>
# 添加配置
mendmix.task.zkServers=127.0.0.1:2181
#扫描@ScheduleConf注解的包
mendmix.task.scanPackages=com.mendmix.demo.task
#执行线程数
mendmix.task.threadPoolSize=3
#本地调试等情况,可以通过配置禁止运行
mendmix.task.disabled=true
分布式协调器注册逻辑:
- 第一优先级:包含
mendmix.task.zkServers
或mendmix.task.zkServers
配置,使用Zookeeper
作为分布式协调器 - 第二优先级:存在
RedisTemplate
则使用Redis
作为分布式协调器 - 以上都不存在则是单机模式
# 多租户支持
定时任务目前支持独立数据源的多租户模式,只需讲task类继承AbstractJob
改为AbstractMultTenantJob
即可,如:
@Service
@ScheduleConf(cronExpr="0/30 * * * * ?",executeOnStarted = true)
public class DemoTask extends AbstractMultTenantJob{
int count = 1;
@Override
public void doJob(JobContext context) throws Exception {
//do something
}
@Override
public boolean parallelEnabled() {
// 分布式下开启并行计算返回true
return false;
}
}
# 定时任务配置持久化,如果需要动态修改执行时间并持久化
实现接口PersistHandler
并注册为Spring Bean即可
# restAPI
# 只需要注册Servlet即可启用,以springboot为例,启动类添加以下注解即可:
@ServletComponentScan({"com.mendmix.scheduler.api"})
# 查询定时任务状态(节点、任务实例)
GET http://{baseUrl}/scheduler/status
# 执行、启停、更新执行时间表达式
POST http://{baseUrl}/scheduler/command
{
"cmdType" : 1,
"jobName" : "testTask",
"body" : "1"
}
cmdType说明
- 1:执行定时任务
- 2:启用/暂停 (启用:body = ’1‘,停用:body = ’0‘)
- 3:更新时间表达式(body = 时间表达式)