Springboot启动的那些事

写在前面:

可扩展的内容:

 - 初始化器(Initializer)
 - 监听器(Listener)
 - 容器刷新后置Runners(ApplicationRunner或者CommandLineRunner接口的实现类)
 - 启动期间在Console打印Banner的具体实现类

先了解一下springboot running的流程

	public ConfigurableApplicationContext run(String... args) {
		StopWatch stopWatch = new StopWatch();
		stopWatch.start();
		ConfigurableApplicationContext context = null;
		FailureAnalyzers analyzers = null;
		configureHeadlessProperty();
		SpringApplicationRunListeners listeners = getRunListeners(args);
		//发送ApplicationStartedEvent,集成自ApplicationStartingEvent事件
		listeners.starting(); 
		try {
			ApplicationArguments applicationArguments = new DefaultApplicationArguments(
					args);
			//发送 ApplicationEnvironmentPreparedEvent
			ConfigurableEnvironment environment = prepareEnvironment(listeners,
					applicationArguments);
			// 可通过重写org.springframework.boot.Banner的printBanner方法,修改打印的标记
			Banner printedBanner = printBanner(environment);
			// 创建了一个	public static final String DEFAULT_WEB_CONTEXT_CLASS = "org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext";
			// 主要方法是下面的refreshContext(context);
			context = createApplicationContext();
			analyzers = new FailureAnalyzers(context);
			
			//发送 contextPrepared,实现为空,外部无法监听
			//在prepareContext最后,发送ApplicationPreparedEvent
			//applyInitializers(context);自定义的初始化器
			prepareContext(context, environment, listeners, applicationArguments,
					printedBanner);
			refreshContext(context);
			// 调用ApplicationRunner或者CommandLineRunner,多个Runner可通过@order指定顺序,数字越小,优先级越高
			afterRefresh(context, applicationArguments);
			// 更具上下文初始化的情况,发送ApplicationFailedEvent或者ApplicationReadyEvent。这里exception为null,发送ApplicationReadyEvent
			listeners.finished(context, null);
			stopWatch.stop();
			if (this.logStartupInfo) {
				new StartupInfoLogger(this.mainApplicationClass)
						.logStarted(getApplicationLog(), stopWatch);
			}
			return context;
		}
		catch (Throwable ex) {
		// 更具上下文初始化的情况,发送ApplicationFailedEvent或者ApplicationReadyEvent。这里出现异常,发送ApplicationFailedEvent
			handleRunFailure(context, listeners, analyzers, ex);
			throw new IllegalStateException(ex);
		}
	}

一、Initializer

  1. ApplicationStartingEvent:springboot应用启动且未作任何处理(除listener注册和初始化)的时候发送ApplicationStartingEvent
  2. ApplicationEnvironmentPreparedEvent:确定springboot应用使用的Environment且context创建之前发送这个事件
  3. ApplicationPreparedEvent:context已经创建且没有refresh发送个事件
  4. ApplicationStartedEvent:context已经refresh且application and command-line runners(如果有) 调用之前发送这个事件
  5. ApplicationReadyEvent:application and command-line runners (如果有)执行完后发送这个事件,此时应用已经启动完毕.这个事件比较常用,常常在系统启动完后做一些初始化操作
  6. ApplicationFailedEvent:应用启动失败后产生这个事件

二、Listener

  1. ApplicationStartingEvent:springboot应用启动且未作任何处理(除listener注册和初始化)的时候发送ApplicationStartingEvent
  2. ApplicationEnvironmentPreparedEvent:确定springboot应用使用的Environment且context创建之前发送这个事件
  3. ApplicationPreparedEvent:context已经创建且没有refresh发送个事件
  4. ApplicationStartedEvent:context已经refresh且application and command-line runners(如果有) 调用之前发送这个事件
  5. ApplicationReadyEvent:application and command-line runners (如果有)执行完后发送这个事件,此时应用已经启动完毕.这个事件比较常用,常常在系统启动完后做一些初始化操作
  6. ApplicationFailedEvent:应用启动失败后产生这个事件

三、Runner

  1. ApplicationRunner
  2. CommandLineRunner

具体使用:


@Component
public class JDDRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(args);
        System.out.println("这个是测试ApplicationRunner接口");
    }
}

四、Banner

  1. org.springframework.boot.Banner的printBanner方法,修改打印的标记
  2. 在resoure下面简历banner.txt文件,指定输出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值