Elastic-Job-Lite
定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务,外部依赖仅Zookeeper
。mysql
具体参考,官网git
分布式调度github
Elastic-Job-Lite
并没有做业调度中心节点,而是基于部署做业框架的程序在到达相应时间点时各自触发调度。做业高可用spring
Elastic-Job-Lite
提供最安全的方式执行做业。将分片总数设置为1,并使用多于1台的服务器执行做业,做业将会以1主n从的方式执行。最大限度利用资源sql
Elastic-Job-Lite
也提供最灵活的方式,最大限度的提升执行做业的吞吐量。将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,做业将会合理的利用分布式资源,动态的分配分片项。<dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-spring</artifactId> <version>2.1.5</version> </dependency>
# 数据源配置 spring: datasource: url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8&verifyServerCertificate=false&useSSL=false&requireSSL=false driver-class-name: com.mysql.jdbc.Driver username: root password: 123456 # zk配置 regCenter: serverList: localhost:2181 namespace: elastic-job-lite-springboot # 定时任务配置 simpleJob: cron: 0/5 * * * * ? shardingTotalCount: 3 shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou
@Configuration @ConditionalOnExpression("'${regCenter.serverList}'.length() > 0") public class RegistryCenterConfig { @Bean(initMethod = "init") public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList, @Value("${regCenter.namespace}") final String namespace) { return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace)); } }
@Configuration public class JobEventConfig { @Resource private DataSource dataSource; @Bean public JobEventConfiguration jobEventConfiguration() { return new JobEventRdbConfiguration(dataSource); } }
@Configuration public class SimpleJobConfig { @Resource private ZookeeperRegistryCenter regCenter; @Resource private JobEventConfiguration jobEventConfiguration; @Bean public SimpleJob simpleJob() { return new SpringSimpleJob(); } @Bean(initMethod = "init") public JobScheduler simpleJobScheduler(final SimpleJob simpleJob, @Value("${simpleJob.cron}") final String cron, @Value("${simpleJob.shardingTotalCount}") final int shardingTotalCount, @Value("${simpleJob.shardingItemParameters}") final String shardingItemParameters) { return new SpringJobScheduler(simpleJob, regCenter, getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters) , jobEventConfiguration); } private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters) { return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder( jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(), jobClass.getCanonicalName())) .overwrite(true).build(); } }
省略实体代码,请参考源码apache
/zookeeper-XX/bin/zkServer.sh
Elastic-Job-Lite
与XXL job
最大的区别是,没有调度中心,更加轻量化,可是要依赖zk
,读者能够根据本身项目需求选择,本文源码。安全
欢迎关注博主公众号,第一时间推送最新文章springboot