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),然後根據激活的環境加載對應的配置文件。在多個配置文件中出現相同的配置時,優先級順序如下:
- 命令行參數高於所有的配置
- java:comp/env中的JNDI屬性
- ServletConfig參數
- ServletContext參數
- 在@ConfigurationProperties註解中聲明的屬性
- 在@Configuration類中聲明的@Bean方法
- 在@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