自定义SpringApplication
如果默认的SpringApplication的默认设置不符合您的喜好,那么可以通过自定义对其进行设置。
比如不显示bannner,我们可以这样写:
1public static void main(String[] args) {
2 SpringApplication app = new SpringApplication(MySpringConfiguration.class);
3 app.setBannerMode(Banner.Mode.OFF);
4 app.run(args);
5}
这样在启动应用的时候我们就能够看到不加载banner信息了!
注意:
传递给SpringApplication的构造函数的参数是Spring bean的配置源。 在大多数情况下,它们都是对@Configuration类的引用,也可能是对XML配置或应扫描的包的引用。
如果不通过代码配置,可以直接通过application.properties对需要修改的内容进行配置。
流生成器API
如果你想构建层次结构的程序,可以使用SpringApplicationBuilder。通过SpringApplicationBuilder来对SpringApplication的属性进行配置,这样的结构更有层次感。SpringApplicationBuilder为构建 SpringApplication 和 ApplicationContext 实例提供了一套便利的流式API:示例代码如下:
1new SpringApplicationBuilder()
2 .sources(Parent.class)
3 .child(Application.class)
4 .bannerMode(Banner.Mode.OFF)
5 .listeners(new MyListener())
6 ...
7 .run(args);
注意:
SpringApplication将会根据需要创建一个ApplicationContext,默认情况下,如果是非web应用,则会创建一个AnnotationConfigApplicationContext上下文,如果是web应用,则会创建一个AnnotationConfigEmbeddedWebApplicationContext上下文。当然,你也可以通过setWebEnvironment(boolean webEnvironment)来覆盖默认的设置。
事件监听
spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利。
应用事件按如下顺序运行:
- ApplicationStartingEvent在运行开始时但在任何处理之前发送,除了注册侦听器和初始化器之外。
- 当在上下文中使用的环境是已知的但在创建上下文之前发送ApplicationEnvironmentPreparedEvent。
- ApplicationPreparedEvent在刷新开始之前但在bean定义加载之后发送。
- 在刷新上下文之后但在调用任何应用程序和命令行参赛者之前发送ApplicationStartedEvent。
- ApplicationReadyEvent在任何应用程序和命令行参数被调用后发送。 它表示应用程序已准备好为请求提供服务。
- 如果启动时出现异常,则发送ApplicationFailedEvent。
以上这些事件默认不需要修改。
ApplicationListener
在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等。这个时候我们就可以使用Spring提供的ApplicationListener来进行操作。
首先,需要实现ApplicationListener接口并实现onApplicationEvent方法。把需要处理的操作放在onApplicationEvent中进行处理:
1public class ApplicationStartListener implements ApplicationListener<ContextRefreshedEvent>{
2 @Override
3 public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
4 System.out.println("我的父容器为:" + contextRefreshedEvent.getApplicationContext().getParent());
5 System.out.println("初始化时我被调用了。");
6 }
7}
1@Configuration
2public class ListenerConfig {
3 @Bean
4 public ApplicationStartListener applicationStartListener(){
5 return new ApplicationStartListener();
6 }
7}
12018-05-03 11:01:36.272 INFO 12092 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2我的父容器为:null
3初始化时我被调用了。
42018-05-03 11:01:36.467 INFO 12092 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
52018-05-03 11:01:36.473 INFO 12092 --- [ main] com.cloud.skyme.Application : Started Application in 5.556 seconds (JVM running for 7.162)