1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| public ConfigurableApplicationContext run(String... args) { // 启动计时器,用于记录整个启动过程的耗时 StopWatch stopWatch = new StopWatch(); stopWatch.start();
// 定义应用程序上下文和异常报告器列表 ConfigurableApplicationContext context = null; Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList<>();
// 配置 Headless 属性 configureHeadlessProperty();
// 获取 Spring Boot 启动监听器 SpringApplicationRunListeners listeners = getRunListeners(args); // 执行启动监听器的 starting 方法,通知这些监听器启动过程已经开始 listeners.starting();
try { // 解析命令行参数 ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); // 创建应用程序的环境变量 ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments); // 打印 Banner,可以支持自定义哦 Banner printedBanner = printBanner(environment); // 根据应用程序类型创建应用程序创建上下文对象 context = createApplicationContext(); // 初始化异常分析器 analyzers = new FailureAnalyzers(context); // 准备应用程序上下文,扫描 classpath 中的各种配置文件,例如 application.properties、application.yml、META-INF/spring.factories 等,调用 load() 方法加载应用程序的配置。 prepareContext(context, environment, listeners, applicationArguments, printedBanner); // 刷新应用程序上下文 refreshContext(context); // 刷新后操作 afterRefresh(context, applicationArguments); // listeners.finished(context, null); // 停止计时器 stopWatch.stop(); // 记录启动日志 if (this.logStartupInfo) { new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch); } // 返回应用程序上下文 return context; }catch (Throwable ex) { handleRunFailure(context, listeners, analyzers, ex); throw new IllegalStateException(ex); } }
|