1. 程式人生 > >Spring Boot參考教程(五)Spring Boot配置使用之配置類用法

Spring Boot參考教程(五)Spring Boot配置使用之配置類用法

expr web程序 成功 驗證 pan hub parameter lan fix

4.2. SpringBoot配置使用之配置類使用

Spring Boot的大部分自動配置都可以滿足應用要求,但如果想精確的控制應用,或者想覆蓋自動配置,使用配置類是另一種很好的選擇,強調一下,Spring Boot主要使用配置文件和配置類來做配置。

1. 啟動類

在創建Spring Boot工程的時候會根據工程打包的選擇方式,自動生成兩個類,一個用於本地啟動和以打成jar包方式啟動,一個是以War包方式啟動的兩個最重要的配置類。筆者稱為啟動類。

代碼如下:

(1)jar啟動類:

關於SpringApplication我們可以做一些定制,如下簡單演示:

SpringApplication app = newSpringApplication(MySpringConfiguration.class);

app.setBannerMode(Banner.Mode.OFF);

app.run(args);

上述代碼是以代碼的方式關閉Spring Boot的banner顯示。

new SpringApplicationBuilder()

.sources(Parent.class)

.child(Application.class)

.bannerMode(Banner.Mode.OFF)

.run(args);

通過上面代碼可以跟其他的Application進行父子上下文的關聯,不再測試。

2war啟動類

實際上方式基本相似代碼如下:

@SpringBootApplication()

public classHelloworldApplication extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilderconfigure(SpringApplicationBuilder application) {

returnapplication.sources(HelloworldApplication.class);

}

主要是繼承SpringBootServletInitializer後重寫configure()方法而方法中內容跟jar啟動是的main方法一致。

具體可自行研究。

示例如下:

技術分享

2. 配置首頁

在應用中配置應用的首頁有多種方式,有一種是在web.xml中配置,使用welcome元素配置首頁,在Spring Boot中如何配置,演示如下:

編寫代碼:

技術分享

編寫簡單測試主頁:

技術分享

啟動測試:

技術分享

3. 配置Bean

開發中肯定會有場景需要自定義Bean並加入IOC容器中,可以使用@Component註解,當無法使用註解時可使用如下方法,在類上加入@Configuration,在方法上加入註解@Bean,測試代碼如下:創建實體bean

技術分享

創建配置類,在類上加入註解@Configuration,創建配置方法在方法上加入註解@Bean即可:

技術分享

測試代碼:

技術分享

啟動訪問測試:

技術分享

4. 條件化配置Bean

開發時會遇到場景:有些bean的初始化需要依賴其他Bean或根據條件來決定要不要初始化。Spring Boot提供多種條件註解滿足需求,事實上Spring Boot應用的自動裝配很大一部分Bean是根據條件註解實現的。

具體註解和介紹如下:

1. @ConditionalOnBean:Spring容器中是否存在對應的實例。可以通過實例的類型、類名、註解、昵稱去容器中查找(可以配置從當前容器中查找或者父容器中查找或者兩者一起查找)這些屬性都是數組,通過"與"的關系進行查找。

2. @ConditionalOnClass: 類加載器中是否存在對應的類。可以通過Class指定(value屬性)或者Class的全名指定(name屬性)。如果是多個類或者多個類名的話,關系是"與"關系,也就是說這些類或者類名都必須同時在類加載器中存在。

3. @ConditionalOnExpression:判斷SpEL表達式是否成立。

4. @ConditionalOnJava: 指定Java版本是否符合要求。內部有2個屬性value和range。value表示一個枚舉的Java版本,range表示比這個老或者新於等於指定的Java版本(默認是新於等於)。內部會基於某些jdk版本特有的類去類加載器中查詢,比如如果是jdk9,類加載器中需要存在java.security.cert.URICertStoreParameters;如果是jdk8,類加載器中需要存在java.util.function.Function;如果是jdk7,類加載器中需要存在java.nio.file.Files;如果是jdk6,類加載器中需要存在java.util.ServiceLoader。

5. @ConditionalOnMissingBeanSpring容器中是否缺少對應的實例。可以通過實例的類型、類名、註解、昵稱去容器中查找(可以配置從當前容器中查找或者父容器中查找或者兩者一起查找)這些屬性都是數組,通過"與"的關系進行查找。還多了2個屬性ignored(類名)和ignoredType(類名),匹配的過程中會忽略這些bean。

6. @ConditionalOnMissingClass:跟ConditionalOnClass的處理邏輯一樣,只是條件相反,在類加載器中不存在對應的類。

7. @ConditionalOnNotWebApplication:應用程序是否是非Web程序,沒有提供屬性,只是一個標識。會從判斷Web程序特有的類是否存在,環境是否是Servlet環境,容器是否是Web容器等。

8. @ConditionalOnProperty:應用環境中的屬性是否存在。提供prefix、name、havingValue以及matchIfMissing屬性。prefix表示屬性名的前綴,name是屬性名,havingValue是具體的屬性值,matchIfMissing是個boolean值,如果屬性不存在,這個matchIfMissing為true的話,會繼續驗證下去,否則屬性不存在的話直接就相當於匹配不成功。

9. @ConditionalOnResource:是否存在指定的資源文件。只有一個屬性resources,是個String數組。會從類加載器中去查詢對應的資源文件是否存在。

10. @ConditionalOnSingleCandidateSpring容器中是否存在且只存在一個對應的實例。只有3個屬性value、type、search。跟ConditionalOnBean中的這3種屬性值意義一樣。

11. @ConditionalOnWebApplication:應用程序是否是Web程序,沒有提供屬性,只是一個標識。會從判斷Web程序特有的類是否存在,環境是否是Servlet環境,容器是否是Web容器等。

下面只做兩個註解的測試:

測試註解1:@ConditionalOnBean/@ConditionalOnClass

以下測試同時適用於上述兩個註解:

創建兩個實體類如下:

技術分享

技術分享

在配置文件中加入配置:

configbean.value1=value1
configbean.value2=value2
configbean.value3=value3
configbean.value4=value4

Bean:首先測試對ConffigBean1不進行配置初始化

技術分享

測試類:

技術分享

啟動訪問,測試結果:

技術分享

技術分享

修改代碼加入配置ConfigBean1的配置代碼:

技術分享

重啟後測試,訪問結果:

技術分享

技術分享

測試註解2: @ConditionalOnExpression

修改代碼:

技術分享

application.properties中加入配置:

configbean.configbean1.configornot=true

configbean.configbean2.configornot=false

註:上配置及註解表明,配置ConfigBean1不進行配置ConfigBean2

啟動測試:

技術分享

技術分享

測試顯示configbean1初始化成功,configbean2未進行初始化.

關於條件化配置bean有更復雜,更精確的配置使用方式,在後面章節,<整合mybatis+第三方數據源>中會演示。

5. 配置靜態資源

關於SpringBoot靜態資源的配置上文4.1.1中已介紹使用配置文件進行配置的方法,但使用配置文件進行配置有個缺點,就是會覆蓋默認的靜態資源配置,若想保留默認配置可使用如下方式進行配置。

代碼如下,不再測試:

技術分享

<實例代碼>

Github:https://github.com/chunyuding/SpringBoot-Demo

https://github.com/chunyuding/SpringBoot-Demo.git

碼雲:https://gitee.com/dingchunyu/SpringBoot-Demo

https://gitee.com/dingchunyu/SpringBoot-Demo.git

<推薦書籍>

百度雲:http://pan.baidu.com/s/1qYA0Nxi

Spring Boot參考教程(五)Spring Boot配置使用之配置類用法