1、SpringApplication
通过main()方法调用SpringApplication.run()来自启。
public static void main(String[] args) {
SpringApplication.run(MySpringConfiguration.class, args);
}
INFO级别的log会被显示。你可以通过设置spring.main.log-startup-info=false
来关闭。
2、Startup特点
在启动失败的时候,Spring Boot提供大量的FailureAnalyzer(失败分析器)来显示错误信息。
可以通过$ java -jar myproject-0.0.1-SNAPSHOT.jar --debug
来开启debug模式。
3、自定义Banner
在classpath 添加banner.txt文件,或在配置里设置spring.banner.location属性,需要有有对应的本地文件。可以通过设置spring.banner.charset来修改banner文件的编码。banner文件也可以是图片,如banner.gif。
也可以以编程的方式设置,如SpringApplication.setBanner(…)
;可以使用org.springframework.boot.Banner
的printBanner()
方法。
设置spring.main.banner-mode属性来控制banner,console是打印到控制台,log是发给配置的日志,off是关闭。
打印的banner会注册为一个springBootBanner的bean。
4、自定义SpringApplication
通过代码方式,如:
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MySpringConfiguration.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
5、Fluent Builder API
使用SpringApplicationBuilder
来创建ApplicationContext
的继承。SpringApplicationBuilder
允许您将多个方法调用链接在一起,并包含允许您创建层次结构的父方法和子方法,如下例所示:
new SpringApplicationBuilder()
.sources(Parent.class)
.child(Application.class)
.bannerMode(Banner.Mode.OFF)
.run(args);
限制是,web组件也必须包含在子类的上下文本中,父类和子类的环境要求一样。
6、事件和监听器ApplicationContext
创建之前,一些事件就可能触发,所以你不能在这些上面用@Bean
来注册监听器。你可以通过SpringApplication.addListeners(…)
方法或SpringApplicationBuilder.listeners(…)
方法来注册监听器。
不管程序是否创建,如果你想自定义注册这些监听器,你可以添加一个META-INF/spring.factories
文件,通过org.springframework.context.ApplicationListener
的键来关联你的监听器。如:org.springframework.context.ApplicationListener=com.example.project.MyListener
。
SpringBoot事件都有:
①ApplicationStartingEvent:运行的开始,但在任何处理之前,除了侦听器和初始化器的注册。
②ApplicationEnvironmentPreparedEvent:在上下文中使用的环境已知但在创建上下文之前。
③ApplicationPreparedEvent:在刷新开始之前,但在加载bean定义之后。
④ApplicationStartedEvent:在刷新上下文之后,但在调用任何应用程序和命令行运行程序之前。
⑤ApplicationReadyEvent:在调用任何应用程序和命令行运行程序之后。它表示应用程序已准备好为请求提供服务。
⑥ApplicationFailedEvent:如果启动时出现异常。
应用程序事件通过使用Spring框架的事件发布机制发送。此机制的一部分确保在子上下文中发布给侦听器的事件也在任何祖先上下文中发布给侦听器。因此,如果应用程序使用SpringApplication实例的层次结构,则侦听器可能会接收同一类型应用程序事件的多个实例。
为了允许侦听器区分其上下文的事件和子上下文的事件,它应该请求注入其应用程序上下文,然后将注入的上下文与事件的上下文进行比较。上下文可以通过实现ApplicationContextAware注入,如果侦听器是bean,则可以使用@Autowired注入。