# 功能说明

  • 支持分布式保证单节点执行(按节点平均分配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

分布式协调器注册逻辑:

  1. 第一优先级:包含mendmix.task.zkServersmendmix.task.zkServers配置,使用Zookeeper作为分布式协调器
  2. 第二优先级:存在RedisTemplate则使用Redis作为分布式协调器
  3. 以上都不存在则是单机模式

# 多租户支持

定时任务目前支持独立数据源的多租户模式,只需讲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 = 时间表达式)
Last Updated: 6/14/2022, 9:51:10 PM