目录
配置 SpringApplication 与 事件监听器
设置SpringApplication
注意:不能用SpringApplication的静态run()方法来运行Spring Boot应用。
两种方式设置:
方式1:
通过SpringApplication对象的setter方法进行设置,然后调用run()实例方法启动Spring Boot应用。
public static void main(String[] args)
{
// 如果程序要对SpringApplication进行一些设置,那就应该先创建该对象的实例。
var app = new SpringApplication(App.class);
// 取消预初始化,启动延迟初始化
app.setLazyInitialization(false);
// 关闭Banner信息
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
方式2:
通过SpringApplicationBuilder的流式API进行设置,最后调用run()实例方法启动Spring Boot应用。
SpringApplicationBuilder提供了一个额外的好处,它可以设置Spring容器之间的父子关系。
new SpringApplicationBuilder().sources(App.class)
.parent(Parent.class) // 此配置类创建Spring容器作为父容器
.child(Child.class) // 此配置类创建Spring容器作为子容器
.lazyInitialization(true)
.bannerMode(Banner.Mode.OFF)
.run(); // 启动Spring Boot应用
让Spring容器有父子层次关系有一个好处:父容器不能访问子容器中的Bean,但子容器可以访问父容器中所有Bean。
事件监听器:
Spring容器本身就支持事件监听器, 对于传统Spring框架,只要将一个监听器Bean配置在容器中,Spring就会自动将它注册成监听器。
传统方式注册的事件监听器监听不到SpringApplication的事件。
如果要监听SpringApplication触发的事件有两种方式:
方式1:
调用SpringApplication的addListeners()或SpringApplicationBuilder的listeners()方法添加事件监听器
方式2:
用META-INF/spring.factories文件来配置事件监听器。
在该文件中添加如下代码即可注册事件监听器。
(跟自定义失败分析器的道理一样,自己写一个MyListener的类,然后再META-INF/spring.factories配置)
org.springframework.context.ApplicationListener=cn.ljh.boot.MyListener
注意点:
META-INF/spring.factories配置文件通常用于配置一些对Spring Boot本身(SpringApplication)进行定制的组件,比如失败分析器,比如Spring Boot的监听器。
application.properties配置文件通常只是对Spring容器中的Bean进行配置。
SpringApplication依次触发的事件
(1)触发ApplicationStartingEvent事件
(2)触发ApplicationEnvironmentPreparedEvent事件。
(3)触发ApplicationContextInitializedEvent事件。
(4)触发ApplicationPreparedEvent事件。
(5)触发ApplicationStartedEvent事件。
(6)触发AvailabilityChangeEvent事件。
(7)触发ApplicationReadyEvent事件。
(8)触发AvailabilityChangeEvent事件。
(9)触发ApplicationFailedEvent事件。