天天看點

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);