# 分布式定时任务

# 概述

# 使用说明

添加依赖

<dependency>
    <groupId>com.alinesno.cloud.job.core</groupId>
    <artifactId>alinesno-cloud-job-core</artifactId>
    <version>${最新版本}</version>
</dependency>

增加 Zookeeper 注册中心的配置

elastic:
  job:
    MySimpleJob.cron: 0/10 * * * * ?
    zk.serverLists: 127.0.0.1:2181
    zk.namespace: cxytiandi_job2

开启自动配置只需要在 Spring Boot 的启动类上增加@EnableElasticJob注解

配置任务及事件追踪功能在注解中也只需要配置 eventTraceRdbDataSource=你的数据源,就可以使用

// eventTraceRdbDataSource = "datasource"

@ElasticJobConf(name = "MySimpleJob-2", cron = "0/10 * * * * ?",
				shardingItemParameters = "0=0,1=1",
				description = "简单任务" ,
				eventTraceRdbDataSource = "dataSource")
public class MySimpleJob implements SimpleJob {

	private static final Logger log = LoggerFactory.getLogger(MySimpleJob.class) ;

	public void execute(ShardingContext context) {

		String shardParamter = context.getShardingParameter();
		String time = new SimpleDateFormat("HH:mm:ss").format(new Date());

		log.info("分片参数:{} , 开始执行简单任务: {}" , shardParamter, time);
	}

}

# 配置说明

# application.properties 中配置任务信息

使用注解是比较方便,但很多时候我们需要不同的环境使用不同的配置,测试环境跟生产环境的配置肯定是不一样的,当然你也可以在发布之前将注解中的配置调整好然后发布。 为了能够让任务的配置区分环境,还可以在属性文件中配置任务的信息,当属性文件中配置了任务的信息,优先级就比注解中的高。 首先还是在任务类上加@ElasticJobConf(name = "MySimpleJob")注解,只需要增加一个 name 即可,任务名是唯一的。 剩下的配置都可以在属性文件中进行配置,格式为 elasticJob.任务名.配置属性=属性值

elastic.job.MySimpleJob.cron=0/10 * * * * ?
elastic.job.MySimpleJob.overwrite=true
elastic.job.MySimpleJob.shardingTotalCount=1
elastic.job.MySimpleJob.shardingItemParameters=0=0,1=1
elastic.job.MySimpleJob.jobParameter=test
elastic.job.MySimpleJob.failover=true
elastic.job.MySimpleJob.misfire=true
elastic.job.MySimpleJob.description=simple job
elastic.job.MySimpleJob.monitorExecution=false
elastic.job.MySimpleJob.listener=com.cxytiandi.job.core.MessageElasticJobListener
elastic.job.MySimpleJob.jobExceptionHandler=com.cxytiandi.job.core.CustomJobExceptionHandler
elastic.job.MySimpleJob.disabled=true

# Script 任务使用说明

由于 Script 任务的执行逻辑是在具体的脚本中,是通过 scriptCommandLine 来指定执行脚本的路径。我这边为了统一的去发现项目中的任务列表,还是需要建一个脚本的 Java 类,加上 ElasticJobConf 注解,只是不需要写逻辑而已,示例如下:

/**
 * 脚本任务不需要写逻辑,逻辑在被执行的脚本中,这边只是定义一个任务而已
 * @author yinjihuan
 *
 */
@ElasticJobConf(name = "MyScriptJob")
public class MyScriptJob implements ScriptJob {
	public void execute(ShardingContext context) {
	}
}

配置:

elastic.job.MyScriptJob.cron=0/10 * * * * ?
elastic.job.MyScriptJob.overwrite=true
elastic.job.MyScriptJob.scriptCommandLine=/User/local/apache-tomcat/bin/startup.bat

# 鸣谢

此处感谢相关开源项目

此项目基于elastic-job-spring-boot-starter (opens new window)改造