https://blog.csdn.net/ZYC88888/article/details/82868674
启动流程,重点看bootstrap包下
核心类ElasticSearch,程序执行入口main函数
1.先创建SecurityManager 管理器, 然后注册错误监听,监听错误事件
2.调用main,返回状态;如果不是OK状态,就调用exit退出
继续调用父类command的main方法
3. 给当前runtime类注册一个hook线程,Runtime异常关闭时打印异常信息
4.调用before.main()
5.继续调用核心方法mainWithoutErrorHandling
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方法
10.创建bootstrap,返回Instance,如下
11.然后加载安全配置keyStore,不存在则创建,存在就解密,更新keyStore
12.根据已有的配置信息,创建environment对象
13.配置log
14.如果环境的pidFile不为空,就创建一个pidFile(为啥有了还创建?)
15.判断是否关闭了标准流,如果是,就关闭logger和System.out这些
16.检查lucene的jar包,是否被人替换了
17.设置未捕获异常的handler
++++++++++++++++++++++++++华丽的分割线,代表init完成,开始setup ++++++++++++++++++++++++++++++++++++++++
18.调用setup
19.从environment获取配置settings
20.循环environment的每一个plugin,生成对应的控制类controller
21.继续初始化本地陪孩子
22.系统和JVM信息加载
23.添加一个钩子,addShutdownHook,当ES退出时,关闭IO流;关闭日志上下文,配置器
24. 使用jarHell检查重复的jar文件
25.初始化SecurityManager
26.根据初始化好的environment,新创建一个节点node