江帥帥:精通 Spring Boot 系列 03

奈學教育發表於2020-06-16

1. 關閉指定的自動配置

透過上面的 @EnableAutoConfiguration 註解就能根據指定的依賴,自動進行配置。但如果你想關閉某一項自動配置,就需要使用 @SpringBootApplication 下的 exclude 引數來設定。比如,我想關閉 DataSource,程式碼具體如下:


1
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

2. 自定義啟動 banner

能滿足企業定製 logo 或專案啟動圖案。比如,可以藉助如下幾個網站來生成:


1

2
3

生成之後,直接將複製好的圖案,放到新建的 banner.txt 檔案中。執行程式之後,具體顯示效果如下:

3. 全域性配置檔案

一般使用 application.properties 或者 application.yml 檔案來當作全域性配置檔案。它能被新增在下面幾個目錄下,區別是載入的順序是不同的,具體如下:


1專案根目錄的 /
config 目錄下

2專案根目錄下
3類路徑的 / config 目錄下
4類路徑下

比如,可以在 application.properties 配置檔案中,設定埠、請求字尾等內容。具體的配置引數可以參考官網文件第 10 章 Appendices:

4. 配置 Web 容器

在 Spring Boot 應用中,可以內建 Tomcat、Netty、Jetty 等容器。

1)配置 Tomcat

如果新增了 spring-boot-starter-web 依賴,則專案會預設使用 Tomcat 作為 Web 容器。

針對 Tomcat 可以新增一些配置,具體配置如下:


 1# 埠

2server.port=80
3# 錯誤跳轉路徑
4server.error.path
5# session 失效時間
6server.servlet.session.timeout
7# 專案名稱
8server.servlet.context-path 
9# 編碼,一般 utf-8
10server.tomcat.uri-encoding=utf-8
11# ...

2)配置 Jetty

在 Spring Boot 應用中嵌入 Jetty 的配置很簡單,把 spring-boot-starter-web 中的 Tomcat 改成 Jetty 即可,具體配置如下:


 1


2 < dependency>
3     < groupId>org.springframework.boot </ groupId>
4     < artifactId>spring-boot-starter-web </ artifactId>
5     < exclusions>
6         < exclusion>
7             < groupId>org.springframework.boot </ groupId>
8             < artifactId>spring-boot-starter-tomcat </ artifactId>
9         </ exclusion>
10     </ exclusions>
11 </ dependency>
12
13
14 < dependency>
15     < groupId>org.springframework.boot </ groupId>
16     < artifactId>spring-boot-starter-jetty </ artifactId>
17 </ dependency>

3)配置 Undertow

Undertow 是紅帽公司開發的一款基於 NIO 的高效能 Web 嵌入式伺服器,擁有非常好的效能。配置方式具體如下:


 1


2 < dependency>
3     < groupId>org.springframework.boot </ groupId>
4     < artifactId>spring-boot-starter-web </ artifactId>
5     < exclusions>
6         < exclusion>
7             < groupId>org.springframework.boot </ groupId>
8             < artifactId>spring-boot-starter-tomcat </ artifactId>
9         </ exclusion>
10     </ exclusions>
11 </ dependency>
12
13
14 < dependency>
15     < groupId>org.springframework.boot </ groupId>
16     < artifactId>spring-boot-starter-undertow </ artifactId>
17 </ dependency>

5. HTTPS 配置

使用 JDK 提供的 keytool 工具,可以生成一個數字證照,具體命令如下:


1keytool -genkey -
alias httpskey  -keyalg RSA -keysize 2048 -keystore hello.p12 -validity 365

  • -genkey 表示建立一個金鑰

  • -alias httpskey 設定金鑰的別名

  • -keyalg RSA 表示使用的加密演算法是 RSA

  • -keysize 2048 設定金鑰的長度

  • -keystore hello.p12 設定金鑰存放位置

  • -validity 365 設定金鑰的有效時間

然後在 application.properties 檔案中編輯,具體配置如下:


1server.ssl.key-store=hello.p12

2server.ssl.key-alias=httpskey
3server.ssl.key-store-password=123456

6. 型別安全配置

前面也說過,我們的配置檔案可以使用 properties 配置和 yaml 配置,專案啟動後,它們都會被載入到 Spring 的環境中,如果你要用配置資訊的話,直接使用 @Value 註解即可。

但資料注入到屬性中,需要注意安全。Spring Boot 使用型別安全配置屬性,即使在資料量非常龐大的情況下,將配置檔案中的資料注入到 Bean 裡也是很方便的。


1user.name=翠花

2user.age=18
3user.address=北京

新增對應的 Bean 類,使用   @ConfigurationProperties  註解來使用配置,透過 prefix 屬性來描述要載入的配置檔案的字首,具體如下:


1
@Component

2 @ConfigurationProperties(prefix= "user")
3 public  class  User {
4     private String name;
5     private Integer age;
6     private String address;
7     // get 和 set 方法...
8}

7. YAML 配置

YAML 是專門用來寫配置檔案的語言,非常簡潔、強大,類似 JSON。它可用來替換 application.properties 檔案。YAML 主要是由 spring-boot-starter-web 依賴模組中的 snakeyaml 依賴進行解析。但它不能使用   @propertySource  註解載入 YAML 檔案,否則還要使用 Properties 配置。

舉個小案例,具體寫法如下:


1server:

2    port:80
3    servlet:
4        context-path:/hello
5    tomcat:
6        uri-encoding:utf-8

還可以自定義配置,具體寫法如下:


1user:

2    name:翠花
3    age:18

對應的程式碼,跟前面的 User 類一樣,具體原始碼如下:


1
@Component

2 @ConfigurationProperties(prefix= "user")
3 public  class  User {
4     private String name;
5     private Integer age;
6     // get 和 set 方法...
7}

還能設定成集合的樣式,集合中是單個值,具體寫法如下:


1user:

2    name:翠花
3    age:18
4    aihao:
5        - 燙頭
6        - 捏腳
7        - Reading

對應的程式碼,具體原始碼如下:


1
@Component

2 @ConfigurationProperties(prefix= "user")
3 public  class  User {
4     private String name;
5     private Integer age;
6     private List<String> aihao;
7     // get 和 set 方法...
8}

也能先設定成集合的樣式,但集合中是物件,具體寫法如下:


 1shop:

2    users:
3      - name:翠花
4        age:18
5        aihao:
6            - 燙頭
7            - 捏腳
8            - Reading
9      - name:小強
10        age:18
11        aihao:
12            - 燙頭
13            - 捏腳
14            - Reading

對應的程式碼,具體原始碼如下:


1
@Component

2 @ConfigurationProperties(prefix= "shop")
3 public  class  Users {
4     private List<User> users;
5     // get 和 set 方法...
6}

1
public 

class 
User {

2     private String name;
3     private Integer age;
4     private List<String> aihao;
5     // get 和 set 方法...
6}

8. Profile 配置

如果我們在專案中,需要頻繁在開發環境、測試環境和生產環境中更改大量的配置,會讓你懷疑人生,所以我們使用 @Profile 註解來更加簡潔進行處理。

具體的命名規則:application-{xxx}.properties,這樣就能在不同環境下進行區別配置資訊。具體使用步驟如下:

第一步,新增配置檔案

在 resources 目錄中,建立 application-dev.properties 和 application-prod.properties 檔案,代表開發和生產環境中的配置。


1# 開發環境

2server.port=8080   

1# 生產環境

2server.port=80

第二步,指定對應模式

1)在 application.properties 中指定


1# 開發時用 dev,生產時用 prod

2spring.profiles.active=dev

2)在啟動類 main 方法中指定


1SpringApplicationBuilder builder = 
new SpringApplicationBuilder(SpringBootApp.class);

2
3builder.application().setAdditionalProfiles( "prod");
4
5builder.run(args);

3)也可以在專案啟動時配置

在我們將專案打成 jar 檔案再啟動,具體的操作命令如下:

1java -jar springdemo-xxx.jar --spring.profiles.active=prod

來源於:奈學開發者社群-江帥帥

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976011/viewspace-2698721/,如需轉載,請註明出處,否則將追究法律責任。

相關文章