Hurrayyyyy its' finally Sunday!!!
決定派出我的愛團 Imagine Dragons 來首 hype song 結束這週
Spring Boot 憑藉著「約定大於配置」原則,簡化了 Java 開發過程。其中,如何配置也是個重要的議題。這篇文章會介紹 Spring Boot 的核心配置文件:application.properties
or application.yml
,以及如何利用 Profile-based 配置來應對不同環境。
application.properties
和 application.yml
這兩個文件是Spring Boot中最常見的配置文件。它們都存在於 src/main/resources
目錄下。
application.properties:是一個以 key-value 方式呈現的文件。
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/meowmeowdb
application.yml:是一個 YAML 格式的文件,相比 .properties
文件更具有層次性和可讀性。
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/meowmeowdb
以前初學時習慣使用 .properties
,後來逐漸換成 .yml
結構上比較明瞭。該選擇哪一種取決於專案團隊的偏好。喜歡結構清晰、層次分明,那 .yml
是不錯的選擇。
在實際開發中,往往會遇到這樣的情境:DEV 環境、SIT 環境、UAT 環境、PROD 環境的配置都有所不同。Spring Boot 透過 Profile-based 配置來解決這個問題。
假如我們有一個開發環境和一個生產環境,我們可以這樣命名配置文件:
application-dev.properties
或 application-dev.yml
application-prod.properties
或 application-prod.yml
在運行 Spring Boot 應用時,你可以通過以下方式指定使用哪個配置:
$ java -jar ithomexdemoApplication.jar --spring.profiles.active=dev
或者,在 application.properties
或 application.yml
中指定:
spring.profiles.active=dev
此外,還可以在 Java 中使用 @Profile
註解來指定某一段程式碼只在某個 Profile 下才運行:
@Configuration
@Profile("dev")
public class DevConfig {
// ...
}
假設我們正在開發一個電商網站,可能需要在不同環境下進行不同的配置:
DEBUG
。ERROR
。通過 Profile-based 的配置,我們可以輕鬆地進行管理,而不必手動更改配置或重新 compile 程式碼。
@Value
和 @ConfigurationProperties
當配置完成後,如果需要在程式碼中使用這些配置 value 值。Spring Boot 也提供了兩種方式
使用 @Value
@Component
public class MyService {
@Value("${server.port}")
private int port;
public void printPort() {
System.out.println("Server Port: " + port);
}
}
**使用 @ConfigurationProperties
:**將配置文件中的一組屬性映射到一個 Bean 上
@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties {
private String url;
private String username;
private String password;
// getters and setters...
}
啟動一個 Spring Boot project 時,它有一個固定的順序來讀取配置文件。
/config
package → classpath:/config 資料夾中config/
subdirectory in the current directory → 當前目錄下的 /config 子目錄config/
subdirectory這順序意味著外部目錄的配置文件會覆蓋內部相同的配置。
Profile-specific 文件的搜尋順序:
假設我們已經啟動了一個名為 prod
的profile,那麼Spring Boot會尋找名為 application-prod.properties
或 application-prod.yml
的文件。這些 profile-specific 的文件會覆蓋 default 配置文件中相同的屬性。
配置文件的讀取順序:
Spring Boot 首先讀取 default 配置文件 application.properties
或 application.yml
。接著繼續讀取與啟動 profiles 相對應的文件。例如,如果啟動了 dev
和 prod
profiles,Spring Boot 會按以下順序讀取文件:
在這個過程中,後讀取的文件中將覆蓋先讀取文件中相同的配置。
今天這篇帶大家了解 Spring Boot 配置文件,如此能讓我們更靈活地去管理和組織專案中的配置,進而在不同的環境中都能夠確保應用程式使用正確的配置運行!