文章目录
4 Spring boot的特性
这个章节对Spring boot有更细的介绍。如果你可想直接用,那么前面1~3已经可以满足你了,如果你想要自定义,必须得看下面细节得介绍。
4.1 SpringApplication
SpringApplication类提供了一个便方式来启动。
默认log的级别-- INFO
,这个可以设置请关注 Log levels
。
不过你可以使用利用实现
得方式来关闭启动信息的打印,通过设置spring.main.log-startup-info
为false
。
启动时你可以覆盖SpringApplication得子类得方法
logStartupInfo(boolean)
4.1.1 Startup Failure 启动失败
你的应用启动失败时,会注册FailureAnalyzers
类去提供一个描述失败信息的机会。
web引用的默认启动时8080,被占用时会报错
除了默认的你可以提供你自己的FailureAnalyzers
,怎么添加后面有介绍。
如果想要更详细得信息
方式一: 配置文件中设置debug级别
方式二:java -jar 设置 debug
java -jar myproject-0.0.1-SNAPSHOT.jar --debug
4.1.2 懒加载
懒加载开启后,类只有在被使用时加载,而非启动时。好处是节约启动时间。web项目时,懒加载会让http request命中时才会加载相关的bean。
由于懒加载,一些问题不能在启动时暴露,比如自身的问题,或者jvm内存不足得问题,所以默认懒加载时关闭的
打开懒加载
使用在SpringApplicationBuilder
的lazyInitialization
或者setLazyInitialization
方法。会这个使用初始化的属性来打开。
开一个注解@Lazy(false)
4.1.3 自定义 Banner
banner是启动时打印的输出,可以自定义。可以有文字,gif.jpg,png等
详见原文
可以使用SpringApplication.setBanner(…)
方法或者,使用org.springframework.boot.Banner
接口,实现printBanner()
即可。
你可以使用spring.main.banner-mode
来决定你是打印到控制台,还是log,或者关闭。
banner,被注成csingleton,名为
springBootBanner
4.1.4 自定义 SpringApplication
除此之外也可以用application.properties
来配置应用属性。
4.1.5 流畅的builder API 定义SpringApplication
如果你需要层次化得ApplicationContext,可以使用buildr模式,利用source
标记parent,child标记子方法
4.1.6 应用事件和监听。
除了寻常Spring Framework的event比如ContextRefreshedEvent
之外,SpringApplication还有额外的事件
一些事件是在Application创建时产生,所以你无法将listener 注册为
@Bean
(因为bean在其后)。但是你可以使用SpringApplication.addListeners(…)
或者SpringApplicationBuilder.listeners(…)
来添加监听器。
如果你想要自动注册监听器,无视应用是否被创建,你可以添加META-INF/spring.factories
文件到你的工程,并引用他
org.springframework.context.ApplicationListener=com.example.project.MyListener
应用事件得发送顺序
ApplicationStartingEvent
产生在所有进程之前,除过listeners
和initializers
的注册。- 在context被创建前,但Enviroment被确认后,
ApplicationEnvironmentPreparedEve
会发出 ApplicationContextInitializedEvent
被发出,当ApplicationContext
被准备好,ApplicationContextInitiallizers被调用,但是在任何bean 定义被加载前ApplicationPrepareEvent
在context刷新之前发送,但是在bean 定义被加载之后ApplicationStartedEvent
在context刷新之后,但是在应用和command-line runners被调用之前。ApplicationReadyEvent
在任何application和commamd-line调用之后,意味着应用可以去正常服务ApplicationFailedEvent
在启动存在异常时抛出。
上述列表只