Spring Boot多配置文件詳解

Spring Boot多配置文件是指在開發過程中,一個應用程序中存在多個配置文件,每個配置文件針對不同的環境和不同的需求進行配置。本文將從不同的方面詳細闡述Spring Boot多配置文件。

一、Spring Boot配置文件

Spring Boot允許用戶通過配置文件來配置應用程序。Spring Boot約定了四種文件擴展名(.properties,.yml,.yaml,.json)來創建配置文件。其默認的配置文件名稱為application.properties/application.yml,在src/main/resources目錄下。這裡我們以application.properties為例進行講解。

# application.properties

# 配置端口號
server.port=8080

# 配置Context Path
server.servlet.context-path=/demo

# 配置數據源
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

在配置文件中我們可以對端口號、Context Path、數據源進行配置。如果需要使用yml文件作為配置文件,我們只需將application.properties文件更改為application.yml,並修改配置內容即可。

# application.yml

server:
  port: 8080
  servlet:
    context-path: /demo

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

二、Spring Boot配置SSL

SSL(Secure Sockets Layer)是一種用於網絡安全的協議,它通過加密和解密數據傳輸來保證數據傳輸的安全性。Spring Boot為我們提供了配置SSL的方式。需要藉助keytool工具生成證書。

首先,我們需要在application.properties文件中添加如下配置:

# 配置SSL
server.ssl.key-store=classpath:ssl/demo.keystore
server.ssl.key-store-type=jks
server.ssl.key-store-password=123456
server.ssl.key-password=123456

其中,server.ssl.key-store指定存儲證書的文件位置和名稱;server.ssl.key-store-type指定證書的類型;server.ssl.key-store-password指定證書文件的密碼;server.ssl.key-password指定證書的密碼。

接下來,使用keytool生成證書:

keytool -genkey -alias demo -keyalg RSA -keysize 2048 -keystore demo.keystore

上述命令會在當前目錄下生成demo.keystore文件作為證書存儲。我們也可以將證書存儲在classpath下。

三、Spring Boot多配置文件選擇

在實際開發中,我們經常需要為不同的環境(開發、測試、生產)使用不同的配置文件。Spring Boot提供了多種方式來選擇不同的配置文件。

第一種方法是根據不同的配置文件名進行選擇。以application-dev.properties/application-test.properties/application-prod.properties為例:

# application-dev.properties

# 配置端口號
server.port=8080
# application-test.properties

# 配置端口號
server.port=8081
# application-prod.properties

# 配置端口號
server.port=8082

上述配置文件中指定了不同的端口號。我們只需在啟動時指定配置文件名即可。

java -jar demo.jar --spring.profiles.active=dev
java -jar demo.jar --spring.profiles.active=test
java -jar demo.jar --spring.profiles.active=prod

第二種方法是在配置文件中使用條件語句進行選擇。以application.yml為例:

# application.yml

server:
  port: 8080

spring:
  profiles:
    active:
      dev:
        server:
          port: 8081
      test:
        server:
          port: 8082
      prod:
        server:
          port: 8083

上述配置文件中使用了Spring框架的條件註解,判斷當前環境是否為dev/test/prod環境,然後對端口號進行不同的配置。

四、Spring Boot的配置文件

Spring Boot默認支持多種類型的配置文件,包括properties、yml、yaml、json。對於不同的文件類型,我們需要使用不同的解析器來解析文件內容。如果需要添加自定義的配置文件類型,我們可以添加對應的解析器。

以.properties文件為例,在Spring Boot內置的DefaultPropertiesParser中,我們可以看到如下代碼:

private static final Pattern KEY_VALUE_PATTERN = Pattern.compile("^(\\S+)?\\s*[:=] ?(\\S.*)$");

該代碼塊用於解析.properties文件中的鍵值對。我們可以看到,該正則表達式的匹配規則為「鍵值對之間使用空格或=符號進行分隔」。如果我們需要添加自定義的.properties文件類型,例如需要使用xml格式的配置文件,我們可以添加一個專門解析xml格式的解析器。

五、Spring Boot多配置文件打包

在打包時,我們需要將特定環境的配置文件打包進去。Spring Boot提供了兩種方式進行配置文件的選擇。

第一種方式是在pom.xml中添加顯式配置。以application-dev.properties為例:


<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>application-dev.properties</include>
      </includes>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

上述代碼為打包時指定了application-dev.properties文件。我們也可以指定多個文件進行打包。

第二種方式是使用maven插件進行打包。以application-dev.properties為例:

mvn clean package -Dspring.profiles.active=dev

上述命令會將dev環境下的配置文件打包進去,同時也可以指定其他環境。

六、Spring Boot配置文件優先級

Spring Boot在加載配置文件時,會先加載默認的配置文件(application.properties/application.yml),然後根據激活的環境加載對應的配置文件。在多個配置文件中出現相同的配置時,優先級順序如下:

  1. 命令行參數高於所有的配置
  2. java:comp/env中的JNDI屬性
  3. ServletConfig參數
  4. ServletContext參數
  5. 在@ConfigurationProperties註解中聲明的屬性
  6. 在@Configuration類中聲明的@Bean方法
  7. 在@SpringBootApplication類中聲明的@Bean方法

七、Spring Boot文件下載

在開發中,我們經常需要下載文件到本地。Spring Boot提供了一個簡單的方式進行文件下載。

@RestController
public class FileDownloadController {

    @RequestMapping("/download")
    public ResponseEntity<byte[]> download() throws IOException {

        InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test.pdf");
        byte[] data = IOUtils.toByteArray(inputStream);

        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attachment; filename=test.pdf");

        return ResponseEntity
                .ok()
                .headers(headers)
                .body(data);
    }
}

上述代碼為實現文件下載的Controller類。我們通過調用getClass().getClassLoader().getResourceAsStream(“test.pdf”)來獲取文件輸入流,將流數據封裝到ResponseEntity對象中,設置Content-Disposition響應頭,即可進行文件下載。

八、Spring Boot配置文件加密

Spring Boot提供了一種簡單的方式來對配置文件進行加密。我們可以使用jasypt進行加密和解密操作。

第一步是引入jasypt的依賴:

<dependency>
  <groupId>org.jasypt</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.3</version>
</dependency>

第二步是在application.properties中進行配置:

# 配置加密和解密密碼
jasypt.encryptor.password=secret

# 配置需要加密的屬性
myapp.password=ENC(ENCRYPTED_PASSWORD)

在上述代碼中,jasypt.encryptor.password指定了加密和解密使用的密碼;myapp.password指定了需要加密的屬性。我們將需要加密的屬性放在ENC()中即可。

使用jasypt加密文件的方式如下:

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="secret" password=password algorithm=PBEWithMD5AndDES

上述命令用於加密「secret」明文密碼,輸出加密結果。

九、Spring Boot配置文件密碼加密

在實際開發過程中,我們可能會在配置文件中配置數據庫密碼等重要信息。為了防止這些信息泄露,我們需要對密碼進行加密處理。Spring Boot提供了一種簡單的方式來對密碼進行加密和解密操作。

第一步是在application.properties中進行配置:

# 配置加密和解密密碼
jasypt.encryptor.password=secret

第二步是使用jasypt對密碼進行加密:

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="P@ssw0rd" password=secret algorithm=PBEWithMD5AndDES

上述命令用於加密「P@ssw0rd」明文密碼,輸出加密結果。

第三步是在application.properties中配置加密後的密碼:

# 配置數據源
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=ENC(ENCRYPTED_PASSWORD)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

需要注意的是,我們需要將加密後的密碼放在ENC()中,Spring Boot會自動進行解密操作。

總結

本文詳細闡述了Spring Boot多配置文件的各個方面,包括配置文件的編寫方法、SSL配置、多配置文件選擇方法、打包方式、文件下載、配置文件加密等等。希望本文能對您在Spring Boot開發中使用多配置文件有所幫助。

原創文章,作者:KJTIW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/368961.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KJTIW的頭像KJTIW
上一篇 2025-04-12 13:00
下一篇 2025-04-12 13:00

相關推薦

發表回復

登錄後才能評論