天天看点

Spring Boot:自定义SpringApplication

自定义SpringApplication

如果​

​SpringApplication​

​​的默认值不满足我们的需求,可以创建​

​SpringApplication​

​实例并对其进行自定义设置,例如,要关闭横幅:

package com.kaven.springboot;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(SpringbootApplication.class);
        application.setBannerMode(Banner.Mode.OFF);
        application.run(args);
    }
}      
Spring Boot:自定义SpringApplication

​SpringApplication​

​​是可用于从​

​main​

​​方法引导和启动​

​Spring​

​应用程序的类,默认情况下,该类将执行以下步骤来引导应用程序:

  • 创建一个适当的​

    ​ApplicationContext​

    ​实例。
  • 注册一个​

    ​CommandLinePropertySource​

    ​​以将命令行参数公开为​

    ​Spring​

    ​属性。
  • 刷新应用程序上下文,加载所有单例​

    ​bean​

    ​。
  • 触发所有​

    ​CommandLineRunner bean​

    ​。

在大多数情况下,可以直接在​

​main​

​​方法中调用静态​

​run(Class, String[])​

​方法来引导应用程序:

package com.kaven.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}      

对于更高级的配置,可以在应用程序运行之前创建和自定义设置​

​SpringApplication​

​实例:

package com.kaven.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(SpringbootApplication.class);
        // 配置SpringApplication实例
        application.run(args);
    }
}      

​SpringApplication​

​​可以从各种不同的源读取​

​bean​

​​,通常建议使用单个​

​@Configuration​

​​类(如​

​Spring Boot​

​​的启动类,即使用​

​@SpringBootApplication​

​​注解的类,​

​@SpringBootApplication​

​​注解组合了​

​@EnableAutoConfiguration​

​​、​

​@ComponentScan​

​​以及​

​@SpringBootConfiguration​

​等注解)来引导应用程序。

SpringApplication application = new SpringApplication(SpringbootApplication.class);      

也可以通过以下内容来设置​

​sources​

​:

  • ​AnnotatedBeanDefinitionReader​

    ​要加载的全限定类名。
  • ​XmlBeanDefinitionReader​

    ​​要加载的​

    ​XML​

    ​​资源位置,或者​

    ​GroovyBeanDefinitionReader​

    ​​要加载的​

    ​groovy​

    ​脚本位置。
  • ​ClassPathBeanDefinitionScanner​

    ​要扫描的包名称。

通过​

​SpringApplication​

​​类的​

​setSources​

​​方法来设置​

​sources​

​:

/**
   * 设置用于创建ApplicationContext的其他源
   * 源可以是:类名、包名或XML资源位置
   */
  public void setSources(Set<String> sources) {
    Assert.notNull(sources, "Sources must not be null");
    this.sources = new LinkedHashSet<>(sources);
  }      

配置属性也会绑定到​

​SpringApplication​

​​,这使得动态设置​

​SpringApplication​

​属性成为可能。

Builder API

如果需要构建​

​ApplicationContext​

​​层次结构(具有父子关系的多个上下文),或者喜欢使用​

​Builder API​

​​,就可以使用​

​SpringApplicationBuilder​

​​。​

​SpringApplicationBuilder​

​允许将多个方法调用链接在一起,并包括父方法和子方法,用于创建层次结构。

​SpringApplication​

​​和​

​ApplicationContext​

​​实例的构建器,具有方便的​

​Builder API​

​和上下文层次结构支持。上下文层次结构的简单示例:

new SpringApplicationBuilder(ParentConfig.class)
                .child(ChildConfig.class)
                .run(args);      

另一个常见用例是设置激活配置文件和默认属性以设置应用程序的环境:

new SpringApplicationBuilder(Application.class)
                .profiles("test")
                .properties("password=itkaven")
                .run(args);