本文例程下載:https://files.cnblogs.com/files/heyang78/redisCache_multiEnv_config_210921.rar
本文適用版本:Spring Boot v2.5.4
本文使用配置文件類型:YAML,非properties,這種文件用縮進代表層級關系,需要特別注意的是冒號“:”必須是英文類型的,且后面有個空格,如:
server: port: 8080 myenv: name: 開發環境
如果寫成中文冒號,或者冒號后面沒有空格,可能會有怪異結果出現,大家務必小心檢查。
下面正文開始
需求:
由application.yml指定環境是dev、test或是stage、prod,環境細節在三個不同文件里書寫。
實現步驟:
1.准備application.yml
在src/main/resource目錄下刪除原有文件application.properties(如果有的話),新建文本文件application.yml,內容如下:
#application.yml
spring:
profiles:
active: dev
第一行為注釋可以忽略,下面三行的意思是讓SpringBoot去找application-dev.yml文件(也在src/main/resource目錄下),如果將dev修改成prod,那么會讓SpringBoot去找application-prod.yml文件,其它test、stage據此類推。
2.准備application-dev.yml、application-prod.yml、application-test.yml三個文件,三個文件內容如下:
application-dev.yml
server: port: 8080 myenv: name: 開發環境
application-prod.yml
server: port: 8088 myenv: name: 生產環境
application-test.yml
server: port: 8085 myenv: name: 測試環境
如果還有更多的環境,如application-stage.yml,拷貝一份改名修改即可。
3.如果上兩步都正確,那多環境設置實際就成功了,啟動啟動類,在控制台可以看到是那種環境啟動了,及指定的端口信息:
2021-09-21。。。。 com.hy.myapp.MyApplication : The following profiles are active: dev 2021-09-21。。。。 o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
從上面可以看出當前是開發環境,服務端口是8080。
我們還可以運行測試類來確定當前環境:
import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest class MyApplicationTests { @Value("${server.port}") private String serverPort; @Value("${myenv.name}") private String myenvName; @Test void contextLoads() { } @Test void testEnvironment() { System.out.println("myenvName="+myenvName); System.out.println("serverPort="+serverPort); } }
上面這個類通過Value注解的方式將端口賦予了serverPort成員,環境名稱賦予了myenvName成員,我們跑以下junit就知道當前環境了。
2021-09-21 14:55:42.154 INFO 2300 --- [ main] com.hy.myapp.MyApplicationTests : Started MyApplicationTests in 3.154 seconds (JVM running for 5.168) myenvName=開發環境 serverPort=8080
好了,到此SpringBoot的多環境設置就此完畢。主要是配置,沒什么技巧,確實不難。雖然一眼就看會了,但還是自己親手動手做一遍比較好,因為魔鬼經常藏匿在細節中,不親歷親為,說不定什么時候蹦出來就麻爪了。
END