上一篇 <<<SpringBoot整合Elastic-Job示例
下一篇 >>>XXL-job入门介绍
解决方案
elasticjob.zookeeper.session-timeout-milliseconds=300
elasticjob.zookeeper.connection-timeout-milliseconds=300
@SpringBootApplication(exclude = ElasticJobAutoConfiguration.class)
@Component
@ConditionalOnExpression("'${elaticjob.zookeeper.server-lists}'.length() > 0")
public class ZKconfig {
@Value("${elaticjob.zookeeper.server-lists}")
private String serverList;
@Value("${elaticjob.zookeeper.namespace}")
private String namespace;
@Autowired
private ApplicationContext applicationContext;
@Value("${elaticjob.zookeeper.session-timeout-milliseconds}")
private int sessionTimeoutMilliseconds;
@Value("${elaticjob.zookeeper.connection-timeout-milliseconds}")
private int connectionTimeoutMilliseconds;
@PostConstruct
public void initElasticJob() {
ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration(serverList, namespace);
zookeeperConfiguration.setSessionTimeoutMilliseconds(sessionTimeoutMilliseconds);
zookeeperConfiguration.setConnectionTimeoutMilliseconds(connectionTimeoutMilliseconds);
ZookeeperRegistryCenter regCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
regCenter.init();
Map<String, SimpleJob> map = applicationContext.getBeansOfType(SimpleJob.class);
for (Map.Entry<String, SimpleJob> entry : map.entrySet()) {
SimpleJob simpleJob = entry.getValue();
ElasticSimpleJob elasticSimpleJobAnnotation = simpleJob.getClass().getAnnotation(ElasticSimpleJob.class);
String cron = StringUtils.defaultIfBlank(elasticSimpleJobAnnotation.cron(), elasticSimpleJobAnnotation.value());
String jobName = StringUtils.defaultIfBlank(elasticSimpleJobAnnotation.jobName(), simpleJob.getClass().getName());
SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(jobName, cron, elasticSimpleJobAnnotation.shardingTotalCount()).shardingItemParameters(elasticSimpleJobAnnotation.shardingItemParameters()).jobParameter(elasticSimpleJobAnnotation.jobParameter()).build(), simpleJob.getClass().getCanonicalName());
LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(simpleJobConfiguration).overwrite(elasticSimpleJobAnnotation.overwrite()).build();
String dataSourceRef = elasticSimpleJobAnnotation.dataSource();
if (StringUtils.isNotBlank(dataSourceRef)) {
if (!applicationContext.containsBean(dataSourceRef)) {
throw new RuntimeException("not exist datasource [" + dataSourceRef + "] !");
}
DataSource dataSource = (DataSource) applicationContext.getBean(dataSourceRef);
JobEventRdbConfiguration jobEventRdbConfiguration = new JobEventRdbConfiguration(dataSource);
SpringJobScheduler jobScheduler = new SpringJobScheduler(simpleJob, regCenter, liteJobConfiguration, jobEventRdbConfiguration);
jobScheduler.init();
} else {
SpringJobScheduler jobScheduler = new SpringJobScheduler(simpleJob, regCenter, liteJobConfiguration);
jobScheduler.init();
}
}
}
推荐阅读:
<<<传统任务调度实现方案及demo示例
<<<传统任务调度存在的缺陷
<<<如何保证我们的定时任务只会触发一次
<<<定时任务宕机后如何处理
<<<分布式任务调度平台的特点
<<<XXL-Job和Elastic-job的区别
<<<Elastic-job的设计理念及原理说明
<<<SpringBoot整合Elastic-Job示例
<<<XXL-job入门介绍
<<<XXL-job的架构与执行逻辑说明
<<<XXL-Job Admin平台搭建
<<<SpringBoot项目集成XXL-Job
<<<XXL-Job Admin任务调度的配置及预警示例
<<<XXL-Job使用分片集群机制将100W的短信在5min内发完
<<<XXL-Job如何搭建集群