com.zaxxer
HikariCP
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&verifyServerCertificate=false&useSSL=false&requireSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
# 自动创建更新验证数据库结构
jpa:
hibernate:
ddl-auto: update
show-sql: truedatabase: mysql
==========================================API配置启动==========================================
引入Maven
com.dangdang
elastic-job-lite-core
${latest.release.version}
方法参数ShardingContext包含作业配置,分片和运行时信息。可通过getShardingTotalCount(),getShardingItems()等方法分别获取分片总数,运行在本作业服务器的分片序列号集合等。
Simple类型作业
与Quartz接口相似,用于执行普通的定时任务,只是增加了弹性拓容和分片等功能:
public class MyElasticJob implementsSimpleJob {
@Overridepublic voidexecute(ShardingContext context) {switch(context.getShardingItem()) {case 0://do something by sharding item 0
break;case 1://do something by sharding item 1
break;case 2://do something by sharding item 2
break;//case n: ...
}
}
}
Dataflow类型作业
Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。
public class MyElasticJob implements DataflowJob{
@Overridepublic ListfetchData(ShardingContext context) {switch(context.getShardingItem()) {case 0:
List data = //get data from database by sharding item 0
returndata;case 1:
List data = //get data from database by sharding item 1
returndata;case 2:
List data = //get data from database by sharding item 2
returndata;//case n: ...
}
}
@Overridepublic void processData(ShardingContext shardingContext, Listdata) {//process data//...
}
}
流式处理
可通过DataflowJobConfiguration配置是否流式处理。流式处理数据只有fetchData方法的返回值为null或集合长度为空时,作业才停止抓取,否则作业将一直运行下去; 非流式处理数据则只会在每次作业执行过程中执行一次fetchData方法和processData方法,随即完成本次作业。如果采用流式作业处理方式,建议processData处理数据后更新其状态,避免fetchData再次抓取到,从而使得作业永不停止。 流式数据处理参照TbSchedule设计,适用于不间歇的数据处理。
作业配置
Elastic-Job配置分为3个层级,分别是Core, Type和Root。每个层级使用相似于装饰者模式的方式装配。
Core对应JobCoreConfiguration,用于提供作业核心配置信息,如:作业名称、分片总数、CRON表达式等。
Type对应JobTypeConfiguration,有3个子类分别对应SIMPLE, DATAFLOW和SCRIPT类型作业,提供3种作业需要的不同配置,如:DATAFLOW类型是否流式处理或SCRIPT类型的命令行等。
Root对应JobRootConfiguration,有2个子类分别对应Lite和Cloud部署类型,提供不同部署类型所需的配置,如:Lite类型的是否需要覆盖本地配置或Cloud占用CPU或Memory数量等。
//定义作业核心配置
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("demoSimpleJob", "0/15 * * * * ?", 10).build();//定义SIMPLE类型配置
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, SimpleDemoJob.class.getCanonicalName());//定义Lite作业根配置
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
作业启动
public classJobDemo {public static voidmain(String[] args) {newJobScheduler(createRegistryCenter(), createJobConfiguration()).init();
}private staticCoordinatorRegistryCenter createRegistryCenter() {
CoordinatorRegistryCenter regCenter= new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo"));
regCenter.init();returnregCenter;
}private staticLiteJobConfiguration createJobConfiguration() {//创建作业配置//...
}
}
==========================================Spring配置启动==========================================
引入Maven
com.dangdang
elastic-job-lite-spring
${latest.release.version}
作业配置
作业启动
将配置Spring命名空间的xml通过Spring启动,作业将自动加载。