打包運行 使用插件:spring-boot-maven-plugin打成jar包,直接執行jar就可以運行 POM文件 父項目依賴:spring-boot-starter-parent -> spring-boot-dependencies spring boot的版本仲裁:以後我們導入依賴默認是不需要寫版本的;沒有在dependencies裏面管理的依賴自然需要聲明版本號 spring-boot-starter-web: sping boot starter: spring boot的場景啓動器,幫我們導入web的依賴 spring boot將所有的功能場景都抽離出來,做成一個個的starters(啓動器),只需要在項目裏面引入依賴 resources文件夾中的目錄結構 static:保存所有的靜態資源,js,css,img templates:保存所有的模版頁面(spring boot默認jar包使用嵌入式的tomcat,默認不支持JSP頁面)可以使用模版引擎(freemarker, thymeleaf) application.properties: Spring boot應用的配置文件,可以修改一些默認的配置項 比如配置 'server.port=8081' 來改變端口號 配置文件 配置文件名是固定的 application.properties application.yml YAML文件以數據爲中心的標記語言 YAML語法: k:(空格)v 表示一對鍵值對 以空格的縮進來控制層級 關係,屬性的值大小寫敏感 值的寫法: 字面量:普通的值(數字,字符串,布爾) 字符串默認不需要加引號; 如果加雙引號不會轉譯特殊字符:"\n" -> 換行 如果加單引號會轉譯特殊字符:'\n' -> '\n' 對象以Map的形式表示 縮進寫法: user: name: 'dog' age: 13 行內寫法:user: {name: 'dog', age: 13} 數組(List. Set) 縮進寫法: list: - 1 - 2 - 3 行內寫法:list: [1, 2, 3] @ConfigurationProperties 和 @value("") 的區別 批量注入配置文件中的屬性 一個個的指定 支持鬆散綁定 不支持鬆散綁定 不支持spEL 支持spEL 支持JSR303數據校驗(@Validated) 不支持 支持 不支持複雜類型封裝(比如map,list) 如果說,我們只是在某個業務邏輯中需要獲取一下配置文件中的某項值,使用@Value 如果說,我們專門編寫一個javaBean來配置文件進行映射,我們就使用@ConfigurationProperties @ConfigurationProperties : 默認從全局配置文件中獲取值 @PropertySource 和 @ImportResource @PropertySource : 加載指定的配置文件 @ImportResource : 導入Spring 的配置文件,讓配置文件裏面的內容生效 springBoot推薦給容器添加組件的方式,推薦使用全註解的方式 1. 配置類 ====== spring配置文件 2. 使用@Bean給容器中添加組件 配置文件的佔位符 1. 隨機數 ${random.value} ${random.uuid} ${random.long} 2. 佔位符並可以指定默認值 ${person.name:zhangsan} Profile是Spring對不同環境提供不同配置功能的支持,可以通過激活、指定參數等方式快速切換環境。 多Profile文件 我們在主配置文件編寫的時候,文件名可以是 application-{profile}.properties/yml 默認使用application.properties的配置 激活指定profile 在配置文件中指定 spring.profiles.active=dev yml支持多文檔塊的方式 命令行個參數 虛擬機參數 -Dspring.profiles.active=dev 配置文件的加載位置 Spring boot 啓動會掃描以下位置的application.properties或者application.yml文件作爲spring boot的默認配置文件 file: ./config/ file: ./ classpath: /config/ classpath: / 以上是按照優先級從高優先級到低優先級, 每個配置文件中的屬性有互補配置 我們可以通過spring.config.location來改變默認的配置文件位置 項目打包好以後 我們可以使用命令行參數的形式,啓動項目的時候指定配置文件的新位置 外部配置加載順序 命令行參數 jar包外包的application-{profile}.propertes的配置文件 自動配置原理: 1. spring boot啓動的時候加載主配置類,開啓類自動配置功能@EnableAutoConfiguration 2. @EnableAutoConfiguration的作用 EnableAutoConfigurationImportSelector 利用這個選擇器給容器導入一些組件 可以查看selectImports方法的內容 List<String> configurations = getCandidateConfigrations(annotationMetadata, attributes)獲取候選的配置 SpringFactoriesLoader.loadFactoryNames) 掃描jar包類路徑下 META_INF/Spring.factories 把掃描到的這些文件的內容封裝成properties對象 從properties中獲取到EnableAutoConfiguration.class類對應的值,然後把他們添加到容器中 將類路徑下 META/INF/spring.factories裏面配置的所有的EnableAutoConfiguration值加入到了容器中 每一個這樣的xxxAutoConfiguration類都是容器中的一個組件,都加入到容器中,用他們來做自動配置 每一個自動配置類進行自動配置功能 以 HttpEncodingAutoConfiguration爲例解釋自動配置原理: @Configuration // 表示這是一個配置類,以前編寫的配置文件一樣,也可以給容器添加組件 @EnableConfigurationProperties(HttpEncodingProperties.class) @ConditionalOnWebApplication @ConditionalOnClass(CharacterEncodingFilter.class) @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) public class HttpEncodingAutoConfiguration { 根據當前不同的條件判斷,決定配置是否生效,如果生效就@Bean 給容器中添加一個組件 一旦配置生效,這個配置類就給容器中添加各種組件 3. 精髓 1)spring boot啓動會加載大量的自動配置類 2)我們看我們需要的功能有沒有spring boot默認寫好的自動配置類 3)我們在來看這個自動配置類中到底配置了哪些組件,只要我們要用的組件有 我們就不需要在配置了 4)給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性,我們就可以在配置文件中指定這些屬性的值 4. @Conditional派生註解 作用: 必須是@Conditional指定的添加成立,纔給容器中添加組件,配置文件中的屬性才生效 @ConditionalOnBean // 判斷容器中是否存在組件 @ConditionalJava // 系統的java版本是否符合要求 @ConditionalOnProperty @ConditionalOnResource @ConditionalOnWebAppliaction 5. 我們怎麼知道哪些配置類生效了 在配置文件中配置debug=true
Spring Boot筆記 -- 配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.