springboot學習(二)基礎配置
Spring Boot要求main()
方法所在的啟動類必須放到根package下,命名不做要求
spring-boot-starter-parent詳解
spring-boot-starter-parent
是一個特殊的starter,它用來提供相關的Maven預設依賴。使用它之後,常用的包依賴可以省去version標籤,會從parent這裡繼承,spring-boot-starter-parent 的基本功能
-
定義了 Java 編譯版本為 1.8 。
-
使用 UTF-8 格式編碼。
-
繼承自
spring-boot-dependencies
,這個裡邊定義了依賴的版本,也正是因為繼承了這個依賴,所以我們在寫依賴時才不需要寫版本號。 -
執行打包操作的配置。
-
自動化的資源過濾。
-
自動化的外掛配置。
-
針對 application.properties 和 application.yml 的資源過濾,包括通過 profile 定義的不同環境的配置檔案,例如 application-dev.properties 和 application-dev.yml。
請注意,由於application.properties和application.yml檔案接受Spring樣式佔位符 ${...}
,因此 Maven 過濾更改為使用 @..@
佔位符,當然開發者可以通過設定名為 resource.delimiter 的Maven 屬性來覆蓋 @..@
配置檔案
在 Spring Boot 中,配置檔案有兩種不同的格式,一個是 properties ,另一個是 yaml 。
雖然 properties 檔案比較常見,但是相對於 properties 而言,yaml 更加簡潔明瞭,而且使用的場景也更多,除了簡潔,yaml 還有另外一個特點,就是 yaml 中的資料是有序的,properties 中的資料是無序的,在一些需要路徑匹配的配置中,順序就顯得尤為重要,此時我們一般採用 yaml。
application.properties
在 Spring Boot 中,一共有 4 個地方可以存放 application.properties 檔案。
-
當前專案根目錄下的 config 目錄下
-
當前專案的根目錄下
-
resources 目錄下的 config 目錄下
-
resources 目錄下
按如上順序,四個配置檔案的優先順序依次降低。如下:
這四個位置是預設位置,即 Spring Boot 啟動,預設會從這四個位置按順序去查詢相關屬性並載入。
我們也可以在專案啟動時自定義配置檔案位置,通過 spring.config.location 屬性來手動的指定配置檔案位置,指定完成後,系統就會自動去指定目錄下查詢 application.properties 檔案
如果專案已經打包成 jar ,在啟動命令中加入位置引數即可:
java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/...
普通屬性注入
properties 檔案中的配置可以 通過 @PropertySource 來引入@PropertySource("classpath:book.properties")
,通過@Value註解 @Value("${key.id}")
獲取properties檔案中的配置
型別安全的屬性注入
引入 @ConfigurationProperties(prefix = "book") 註解,並且配置了屬性的字首,此時會自動將 Spring 容器中對應的資料注入到物件對應的屬性中,就不用通過 @Value 註解挨個注入了,減少工作量並且避免出錯
application.yaml在Spring Boot中可以寫在四個不同的位置,分別是如下位置:
-
專案根目錄下的config目錄中
-
專案根目錄下
-
classpath下的config目錄中
-
classpath目錄下
四個位置中的application.yaml檔案的優先順序按照上面列出的順序依次降低。即如果有同一個屬性在四個檔案中都出現了,以優先順序高的為準
可以自己定義yaml檔案位置,兩種方式:
-
一個是使用
spring.config.location
屬性,表示自己重新定義配置檔案的位置,專案啟動時就按照定義的位置去查詢配置檔案,這種定義方式會覆蓋掉預設的四個位置, -
另一個則是使用
spring.config.additional-location
這個屬性,表示在四個位置的基礎上,再新增幾個位置,新新增的位置的優先順序大於原本的位置。
不同於properties檔案的無序,yaml配置是有序的,yaml配置目前不支援@PropertySource註解。
支援HTTPS
生成證書
藉助 Java 自帶的 JDK 管理工具 keytool 來生成一個免費的 https 證書。
進入到 %JAVVA_HOME%\bin
目錄下,執行如下命令生成一個數字證書:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\javaboy.p12 -validity 365
命令含義如下:
-
genkey 表示要建立一個新的金鑰。
-
alias 表示 keystore 的別名。
-
keyalg 表示使用的加密演算法是 RSA ,一種非對稱加密演算法。
-
keysize 表示金鑰的長度。
-
keystore 表示生成的金鑰存放位置。
-
validity 表示金鑰的有效時間,單位為天。
引入HTTPS
將上面生成的 javaboy.p12 拷貝到 Spring Boot 專案的 resources 目錄下。然後在 application.properties 中新增如下配置:
server.ssl.key-store=classpath:javaboy.p12server.ssl.key-alias=tomcathttpsserver.ssl.key-store-password=111111
其中:
-
key-store表示金鑰檔名。
-
key-alias表示金鑰別名。
-
key-store-password就是在cmd命令執行過程中輸入的密碼。
配置完成後,就可以啟動 Spring Boot 專案了,此時如果我們直接使用 Http 協議來訪問介面會報錯,只能使用HTTPS訪問
請求轉發
考慮到 Spring Boot 不支援同時啟動 HTTP 和 HTTPS ,為了解決這個問題,我們這裡可以配置一個請求轉發,當用戶發起 HTTP 呼叫時,自動轉發到 HTTPS 上。具體配置如下:
我們配置了 Http 的請求埠為 8081,所有來自 8081 的請求,將被自動重定向到 8080 這個 https 的埠上。
如此之後,我們再去訪問 http 請求,就會自動重定向到 https。