自定義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);
}
}
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);