0
点赞
收藏
分享

微信扫一扫

修改Elastic-Job默认session过期时间提升故障转移速度

上一篇 <<<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如何搭建集群

举报

相关推荐

0 条评论