javascript
delphi添加类文件_SpringBoot攻略三、配置文件说明
自動配置
SpringBoot啟動的時候加載主配置類(@SpringBootApplication注解修飾), @SpringBootApplication開啟了自動配置功能 @EnableAutoConfiguration。
@EnableAutoConfiguration作用:利用AutoConfigurationImportSelector給spring容器中導入一些組件。
@SpringBootConfiguration作用:表示類提供springboot應用功能,繼@Configuration。
跟蹤一下AutoConfigurationImportSelector中的selectImports方法:
掃描所有jar包類路徑下 META-INF/spring.factories;
把掃描到的這些文件的內容包裝成properties對象;
從properties中獲取到EnableAutoConfiguration.class類(類名)對應的值,然后把他們 添加在容器中;
即將類路徑下META-INF/spring.factories里面配置的所有EnableAutoConfiguration的值加 入到了容器中。
這里,我們分析一下HttpEncodingAutoConfiguration,其他類似:
@Configuration:
定義配置類。
@EnableConfigurationProperties(HttpEncodingProperties.class):
啟動指定類的ConfigurationProperties功能;將配置文件中對應的值和HttpEncodingProperties的屬性綁定起來;并把HttpEncodingProperties加入到ioc容器。
@ConditionalOnWebApplication:
判斷當前應用是否是web應用,如果是,當前配置類 生效
@ConditionalOnClass(CharacterEncodingFilter.class):
判斷當前項目有沒有這個類, CharacterEncodingFilter:SpringMVC中解決亂碼的過濾器。
@ConditionalOnProperty(prefix="spring.http.encoding",value="enabled", matchIfMissing=true):
//判斷配置文件中是否存在某個配置spring.http.encoding.enabled;matchIfMissing表示,即使我們配置文件中不配置spring.http.encoding.enabled=true,也是默認生效的;
@Conditional注解(Spring注解版):
條件注解,通過判斷類路徑下有沒有配置相應jar包來確定是否加載和自動配置這個類。
所有在配置文件中能配置的屬性都是在xxxxProperties類中封裝的,配置文件的配置項 就可以參照其對應的這個屬性類,默認就是UTF-8編碼。
小結:
1、SpringBoot啟動會加載大量的自動配置類;
2、首先檢查SpringBoot默認的自動配置類是否滿足我們的需求;
3、具體查看這個自動配置類中配置了哪些組件;
4、給容器中的自動配置類添加組件的時候,會從properties類中獲取某些屬性。我們 就可以在配置文件中指定這些屬性的值;
5、xxxxAutoConfigurartion:自動配置類,給容器中添加組件Bean;xxxxProperties:封 裝配置文件中相關屬性;
Spring Boot提供了對應用進行自動化配置。相比以前 XML 配置方式,很多顯式方式申 明是不需要的。二者,大多數默認的配置足夠實現開發功能,從而更快速開發。
application.properties添加debug=true,可以在控制臺查看自動配置報告信息。
拓展:@Conditional派生注解了解
核心:@Conditional指定的條件成立,才給容器中添加組件,配置類里面的所有內容才 生效;即自動配置類必須在一定的條件下才能生效:
@ConditionalOnJava: 系統的java版本是否符合要求
@ConditionalOnBean: 容器中存在指定Bean;
@ConditionalOnMissingBean: 容器中不存在指定Bean;
@ConditionalOnExpression: 滿足SpEL表達式指定
@ConditionalOnClass: 系統中有指定的類
@ConditionalOnMissingClass: 系統中沒有指定的類
@ConditionalOnSingleCandidate: 容器中只有一個指定的Bean,或者這個Bean是首 選Bean
@ConditionalOnProperty: 系統中指定的屬性是否有指定的值
@ConditionalOnResource: 類路徑下是否存在指定資源文件
@ConditionalOnWebApplication: 當前是web環境
@ConditionalOnNotWebApplication: 當前不是web環境
自定義屬性(添加新屬性、覆蓋自動配置默認的屬性)
Spring Boot使用默認的全局的配置文件:application.properties 或 application.yml,配置文件名固定。
實例
1、建立PersonProperties
@ConfigurationProperties作用:默認加載classpath:application.properties或application.yml,如果同時存在則加載application.properties,并且把文件中以person前綴的屬性值自動綁定到對應的l字段中。
當然如果是自定義屬性值,也可以使用@PropertySource指定屬性文件。
但是要覆蓋框架自動配置的屬性,只能使用默認的全局配置文件。
2、src/main/resources下建立:application.properties
#properties、yml同時存在,取properties內容#調試信息,控制臺查看自動配置報告信息 #debug=true#自定義屬性 person.name=Jim person.age=28 person.sex=0 person.email=111@qq.com #${}占位符,可以引用配置文件其他屬性值,如果沒有可以配置一個默認值:${person.name:default} person.desc=I'm ${person.name} #n特殊字符,換行 person.desc1=I'm ${person.name} n welcome! #map數據類型,對象類型同理:person.對象名.屬性名 person.maps.privince=js person.maps.city=nj #array、list、set集合 person.list[0]=0 person.list[1]=1 #隨機數,通過 RandomValuePropertySource工具類。可以生成隨機字符串、隨機 int 、隨機 long、某范圍的隨機數 #person.id=${random.int} #person.id=${random.long} #person.id=${random.long[1,100]} #person.id=${random.uuid} person.id=${random.value}或者使用application.yml
person注意:
1、yml格式冒號后面都要一個空格,屬性前面也只能添加一個空格,可以使用在線編 輯yml(http://www.bejson.com/validators/yaml_editor/),有校驗格式功能。
2、單引號:轉義特殊字符,特殊字符只是一個普通的字符串數據,等同于沒有引號
name: ‘zhangsan n lisi’ 輸出:zhangsan n lisi
3、雙引號:不會轉義字符串里面的特殊字符,特殊字符會作為本身想表示的意思
name: "zhangsan n lisi" 輸出:zhangsan
lisi
3、應用啟動類
package4、編寫測試類
pom.xml引入依賴
PersonPropertiesTest:
package@SpringBootTest指定應用啟動類Application
趕緊運行結果看看吧!
擴展:
Spring Boot不單單從application.properties獲取配置,我們可以在程序中設置多種 配置屬性。按照以下列表的優先級從高到低排列:
1、命令行參數
2、java:comp/env 里的 JNDI 屬性
3、JVM 系統屬性
4、操作系統環境變量
5、RandomValuePropertySource 屬性類生成的 random.* 屬性
6、應用外部的application-{profile}.properties或application.yml(帶spring.profile)文件
7、應用內部的application-{profile}.properties或application.yml(帶spring.profile)文件
6、應用以外的 application.properties(或 yml)文件
7、應用內部的 application.properties(或 yml)文件
8、在應用 @Configuration 配置類中,用 @PropertySource 注解聲明的屬性文件
9、SpringApplication.setDefaultProperties 聲明的默認屬性
注意一些特殊屬性如:user.name,如果你在配置文件配置了此屬性,但是確獲取不到 配置文件中的值,為什么呢?因為系統屬性有user.name,優先級又高,會獲取到機器 當前用戶賬號。
總結
以上是生活随笔為你收集整理的delphi添加类文件_SpringBoot攻略三、配置文件说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七猫小说全部免费吗
- 下一篇: 刺激战场金币开箱子在哪里