Fork me on GitHub

spring boot 学习(第二篇)

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(…)方法。在你的应用运行时,应用事 件会以下面的次序发送:

  1. 在运行开始,但除了监听器注册和初始化以外的任何处理之前,会发送一个ApplicationStartedEvent。
  2. 在Environment将被用于已知的上下文,但在上下文被创建前,会发送一个ApplicationEnvironmentPreparedEvent。
  3. 在refresh开始前,但在bean定义已被加载后,会发送一个ApplicationPreparedEvent。
  4. 启动过程中如果出现异常,会发送一个ApplicationFailedEvent。
  5. 还有一个常用的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
    8
    import org.springframework.boot.* 
    import org.springframework.stereotype.*

    @Component
    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接口。

本文欢迎转载,但是希望注明出处并给出原文链接。 如果你有任何疑问,欢迎在下方评论区留言,我会尽快答复。 如果你喜欢或者不喜欢这篇文章,欢迎你发邮件到 alonecong@126.com 告诉我你的想法,你的建议对我非常重要。

------ 本文结束感谢您的阅读! ------
0%