Banner设置
通过在classpath下添加一个banner.txt或设置banner.location来指定相应的文件可以改变启动过程中打印的banner。如果这个 文件有特殊的编码,你可以使用banner.encoding设置它(默认为UTF-8)
- 编程式
SpringBootApplication.setBanner(…)方法。使用 org.springframework.boot.Banner接口,实现你自己的printBanner()方法
1
2
3
4
5 变量 | 描述
${application.version} | MANIFEST.MF中声明的应用版本号,例如1.0
${application.formatted- version}|MANIFEST.MF中声明的被格式化后的应用版本号(被括号包裹且以v作为前缀),用于显 示,例如(v1.0)
${spring-boot.version}|正在使用的Spring Boot版本号,例如1.2.2.BUILD-SNAPSHOT
${spring- boot.formatted-version}|正在使用的Spring Boot被格式化后的版本号(被括号包裹且以v作为前缀), 用于显示,例 如(v1.2.2.BUILD-SNAPSHOT)
上下文设置
你需要创建一个分层的ApplicationContext(多个具有父子关系的上下文),或你只是喜欢使用流畅的构建API,你可以 使用SpringApplicationBuilder。SpringApplicationBuilder允许你以链式方式调用多个方法,包括可以创建层次结构的parent 和child方法。
1
2
3
4
5 new SpringApplicationBuilder()
.showBanner(false)
.sources(Parent.class)
.child(Application.class)
.run(args);
注:创建ApplicationContext层次时有些限制,比如,Web组件(components)必须包含在子上下文(child context)中,且相同 的Environment即用于父上下文也用于子上下文中。
Application事件和监听器
你可以使用多种方式注册事件监听器,最普通的是使用SpringApplication.addListeners(…)方法。在你的应用运行时,应用事 件会以下面的次序发送:
- 在运行开始,但除了监听器注册和初始化以外的任何处理之前,会发送一个ApplicationStartedEvent。
- 在Environment将被用于已知的上下文,但在上下文被创建前,会发送一个ApplicationEnvironmentPreparedEvent。
- 在refresh开始前,但在bean定义已被加载后,会发送一个ApplicationPreparedEvent。
- 启动过程中如果出现异常,会发送一个ApplicationFailedEvent。
- 还有一个常用的ContextRefreshedEvent
注:你通常不需要使用应用程序事件,但知道它们的存在会很方便(在某些场合可能会使用到)。
Web环境
- 一个SpringApplication将尝试为你创建正确类型的ApplicationContext。在默认情况下,使用 AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext取决于你正在开发的是否是web 应用。
- 用于确定一个web环境的算法相当简单(基于是否存在某些类)。如果需要覆盖默认行为,你可以使用 setWebEnvironment(boolean webEnvironment)。通过调用setApplicationContextClass(…),你可以完全控制 ApplicationContext的类型。
注:当JUnit测试里使用SpringApplication时,调用setWebEnvironment(false)是可取的.
命令行启动器
- 如果你想获取原始的命令行参数,或一旦SpringApplication启动,你需要运行一些特定的代码,你可以实现 CommandLineRunner接口。在所有实现该接口的Spring beans上将调用run(String… args)方法。
1
2
3
4
5
6
7
8import org.springframework.boot.*
import org.springframework.stereotype.*
public class MyBean implements CommandLineRunner {
public void run(String... args) {
// Do something... }
}
如果一些CommandLineRunner beans被定义必须以特定的次序调用,你可以额外实现org.springframework.core.Ordered接 口或使用org.springframework.core.annotation.Order注解。
Application退出
- 每个SpringApplication在退出时为了确保ApplicationContext被优雅的关闭,将会注册一个JVM的shutdown钩子。所有标准的 Spring生命周期回调(比如,DisposableBean接口或@PreDestroy注解)都能使用。
- 此外,如果beans想在应用结束时返回一个特定的退出码(exit code),可以实现 org.springframework.boot.ExitCodeGenerator接口。