一文帶你了解SpringBoot中啟動(dòng)參數(shù)的各種用法
在使用 Spring Boot 開(kāi)發(fā)應(yīng)用時(shí),我們通常需要根據(jù)不同的環(huán)境(開(kāi)發(fā)、測(cè)試、生產(chǎn))或特定需求調(diào)整啟動(dòng)參數(shù),例如:
- 修改默認(rèn)端口
- 指定不同的配置文件
- 控制 JVM 內(nèi)存大小
- 傳遞自定義參數(shù)
那么,Spring Boot 提供了哪些方式來(lái)配置這些啟動(dòng)參數(shù)?今天我們就來(lái)詳細(xì)解析 Spring Boot 啟動(dòng)參數(shù)的各種用法,并附帶代碼示例,讓你可以靈活掌控應(yīng)用的啟動(dòng)過(guò)程。
一、啟動(dòng)參數(shù)的常見(jiàn)傳遞方式
Spring Boot 允許我們通過(guò)以下幾種方式傳遞啟動(dòng)參數(shù):
方式 | 適用場(chǎng)景 | 示例 |
---|---|---|
命令行參數(shù) | 適用于臨時(shí)修改配置 | java -jar app.jar --server.port=8081 |
application.properties/yml | 適用于項(xiàng)目默認(rèn)配置 | server.port=8081 |
環(huán)境變量 | 適用于 Docker/K8S 部署 | export SERVER_PORT=8081 |
JVM 啟動(dòng)參數(shù) | 適用于調(diào)整 JVM 運(yùn)行時(shí)行為 | -Xmx512m -Dspring.profiles.active=prod |
System.getProperty() 讀取 | 適用于自定義動(dòng)態(tài)參數(shù) | System.getProperty("custom.param") |
接下來(lái),我們逐個(gè)解析這些方式的用法和示例代碼。
二、通過(guò)命令行參數(shù)傳遞啟動(dòng)參數(shù)
最簡(jiǎn)單的方式是在啟動(dòng) jar 文件時(shí),使用 --參數(shù)名=值 的格式來(lái)傳遞參數(shù)。
示例:修改 Spring Boot 端口
java -jar myapp.jar --server.port=8081
效果:應(yīng)用啟動(dòng)后,監(jiān)聽(tīng)的端口會(huì)變?yōu)?8081。
如果想傳遞多個(gè)參數(shù),可以這樣寫(xiě):
java -jar myapp.jar --server.port=8081 --spring.application.name=myapp
注意:命令行參數(shù)的優(yōu)先級(jí)比 application.properties 更高,即使 application.properties 里定義了 server.port=8080,命令行傳遞的 8081 仍然會(huì)覆蓋它。
三、使用 application.properties 或 application.yml 配置參數(shù)
Spring Boot 提供了 application.properties(或 application.yml)來(lái)管理應(yīng)用配置,這種方式適用于默認(rèn)參數(shù)配置。
示例:application.properties
server.port=8082 spring.application.name=myapp logging.level.root=INFO
示例:application.yml
server: port: 8082 spring: application: name: myapp logging: level: root: INFO
優(yōu)點(diǎn):
- 適用于長(zhǎng)期配置,不用每次啟動(dòng)都傳遞參數(shù)。
- 配置清晰,可集中管理多個(gè)環(huán)境的參數(shù)。
缺點(diǎn):
- 配置是靜態(tài)的,運(yùn)行時(shí)修改需要重啟應(yīng)用。
- 無(wú)法動(dòng)態(tài)傳遞參數(shù)。
四、使用環(huán)境變量傳遞參數(shù)
在 Docker 或 Kubernetes(K8S)等容器環(huán)境中,通常使用環(huán)境變量傳遞參數(shù)。Spring Boot 默認(rèn)支持從環(huán)境變量讀取參數(shù)。
示例:設(shè)置環(huán)境變量并啟動(dòng)應(yīng)用
export SERVER_PORT=9090 export SPRING_APPLICATION_NAME=MySpringApp java -jar myapp.jar
或者在 Windows cmd 中:
set SERVER_PORT=9090 java -jar myapp.jar
效果:Spring Boot 會(huì)自動(dòng)讀取 SERVER_PORT 并將其作為 server.port 的值,即應(yīng)用會(huì)運(yùn)行在 9090 端口。
五、使用 JVM 啟動(dòng)參數(shù)傳遞參數(shù)
如果我們希望在 JVM 層面?zhèn)鬟f參數(shù),可以使用 -D 選項(xiàng)。
示例:指定運(yùn)行環(huán)境
java -Dspring.profiles.active=prod -jar myapp.jar
在代碼中可以這樣獲?。?/p>
String profile = System.getProperty("spring.profiles.active"); System.out.println("當(dāng)前環(huán)境:" + profile);
示例:限制 JVM 內(nèi)存
java -Xmx512m -Xms256m -jar myapp.jar
- -Xmx512m:最大內(nèi)存 512MB
- -Xms256m:初始內(nèi)存 256MB
應(yīng)用場(chǎng)景:
- 適用于不同環(huán)境(開(kāi)發(fā)、測(cè)試、生產(chǎn))的參數(shù)切換。
- 適用于 JVM 級(jí)別的優(yōu)化(如 GC、線程管理等)。
六、Spring Boot 讀取啟動(dòng)參數(shù)的代碼示例
在 Spring Boot 應(yīng)用中,我們可以通過(guò) @Value、Environment 或 System.getProperty() 讀取啟動(dòng)參數(shù)。
1. 通過(guò) @Value 讀取參數(shù)
import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/config") public class ConfigController { @Value("${server.port}") private String serverPort; @Value("${spring.application.name}") private String appName; @GetMapping("/info") public String getConfigInfo() { return "App: " + appName + ", Running on Port: " + serverPort; } }
2. 通過(guò) Environment 讀取參數(shù)
import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EnvController { private final Environment env; public EnvController(Environment env) { this.env = env; } @GetMapping("/env") public String getEnvInfo() { return "Profile: " + env.getProperty("spring.profiles.active") + ", Server Port: " + env.getProperty("server.port"); } }
3. 通過(guò) System.getProperty() 讀取 JVM 級(jí)別參數(shù)
@GetMapping("/jvm") public String getJvmParams() { return "JVM Param: " + System.getProperty("custom.param", "默認(rèn)值"); }
如果我們用以下方式啟動(dòng)應(yīng)用:
java -Dcustom.param=myValue -jar myapp.jar
那么 /jvm 接口會(huì)返回:
JVM Param: myValue
七、總結(jié):如何選擇合適的啟動(dòng)參數(shù)方式
方式 | 適用場(chǎng)景 | 是否可動(dòng)態(tài)修改 | 優(yōu)先級(jí) |
---|---|---|---|
命令行參數(shù) | 適用于臨時(shí)配置,如測(cè)試 | ? | ?? 最高 |
application.properties | 適用于默認(rèn)配置 | ? | ?? 低 |
環(huán)境變量 | 適用于容器化部署 | ? | ?? 高 |
JVM 參數(shù) | 適用于調(diào)整 JVM 行為 | ? | ?? 高 |
最佳實(shí)踐
1.開(kāi)發(fā)環(huán)境:使用 application.properties 作為默認(rèn)配置。
2.測(cè)試環(huán)境:使用命令行參數(shù)或環(huán)境變量傳遞測(cè)試配置。
3.生產(chǎn)環(huán)境:使用 -Dspring.profiles.active=prod + 環(huán)境變量,實(shí)現(xiàn)動(dòng)態(tài)配置管理。
掌握 Spring Boot 啟動(dòng)參數(shù),你的應(yīng)用將更加靈活高效!
到此這篇關(guān)于一文帶你了解SpringBoot中啟動(dòng)參數(shù)的各種用法的文章就介紹到這了,更多相關(guān)SpringBoot啟動(dòng)參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?MVC內(nèi)置過(guò)濾器功能示例詳解
這篇文章主要為大家介紹了Spring?MVC內(nèi)置過(guò)濾器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Java與Python之間使用jython工具類實(shí)現(xiàn)數(shù)據(jù)交互
今天小編就為大家分享一篇關(guān)于Java與Python之間使用jython工具類實(shí)現(xiàn)數(shù)據(jù)交互,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03JAVA 實(shí)現(xiàn)磁盤(pán)文件加解密操作的示例代碼
這篇文章主要介紹了JAVA 實(shí)現(xiàn)磁盤(pán)文件加解密操作的示例代碼,幫助大家利用Java實(shí)現(xiàn)文件的加解密,感興趣的朋友可以了解下2020-09-09Java運(yùn)算符的常見(jiàn)問(wèn)題與用法小結(jié)
這篇文章主要介紹了Java運(yùn)算符,結(jié)合實(shí)例形式總結(jié)分析了Java各種常見(jiàn)運(yùn)算符,包括算術(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符等相關(guān)功能、原理與使用技巧,需要的朋友可以參考下2020-04-04SpringBoot2 整合MinIO中間件實(shí)現(xiàn)文件便捷管理功能
這篇文章主要介紹了SpringBoot2 整合MinIO中間件,實(shí)現(xiàn)文件便捷管理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07