https://blog.csdn.net/ZYC88888/article/details/82868674

启动流程,重点看bootstrap包下

ElasticSearch 源码分析二 启动流程 初始化

核心类ElasticSearch,程序执行入口main函数

ElasticSearch 源码分析二 启动流程 初始化

1.先创建SecurityManager 管理器, 然后注册错误监听,监听错误事件

2.调用main,返回状态;如果不是OK状态,就调用exit退出

继续调用父类command的main方法

ElasticSearch 源码分析二 启动流程 初始化

3. 给当前runtime类注册一个hook线程,Runtime异常关闭时打印异常信息

4.调用before.main()

5.继续调用核心方法mainWithoutErrorHandling

ElasticSearch 源码分析二 启动流程 初始化

6.从入参args中解析出options,设置terminal

7.然后调用到EnvironmentAwareCommand  的 execute方法

   7.1 加载配置,没用就从系统属性中读取 :es.path.data, es.path.home, es.path.logs  

   7.2 继续调用execute方法,先createEnv,加载es.path.conf 目录下配置文件内容,解析elasticsearch.yml

         然后根据配置初始化environment对象,返回

 8.继续调用到elasticsearch的execute方法

    8.1 校验入参options的nonOptionArguments,需要为空

    8.2  读取daemonize,pidFile,quiet的值

++++++++++++++++++++++++++华丽的分割线,代表加载配置完成,环境初始化完成,开始init++++++++++++++++++++

  9.调用bootstrap的init方法

ElasticSearch 源码分析二 启动流程 初始化

10.创建bootstrap,返回Instance,如下

ElasticSearch 源码分析二 启动流程 初始化

11.然后加载安全配置keyStore,不存在则创建,存在就解密,更新keyStore

12.根据已有的配置信息,创建environment对象

13.配置log

14.如果环境的pidFile不为空,就创建一个pidFile(为啥有了还创建?)

ElasticSearch 源码分析二 启动流程 初始化

15.判断是否关闭了标准流,如果是,就关闭logger和System.out这些

16.检查lucene的jar包,是否被人替换了

17.设置未捕获异常的handler

++++++++++++++++++++++++++华丽的分割线,代表init完成,开始setup ++++++++++++++++++++++++++++++++++++++++

18.调用setup

ElasticSearch 源码分析二 启动流程 初始化

19.从environment获取配置settings

20.循环environment的每一个plugin,生成对应的控制类controller

21.继续初始化本地陪孩子

ElasticSearch 源码分析二 启动流程 初始化

22.系统和JVM信息加载

23.添加一个钩子,addShutdownHook,当ES退出时,关闭IO流;关闭日志上下文,配置器

ElasticSearch 源码分析二 启动流程 初始化

24. 使用jarHell检查重复的jar文件

25.初始化SecurityManager

26.根据初始化好的environment,新创建一个节点node

 

 

 

 

相关文章: