Spring Boot 開發環境、測試環境、預生產環境、生產環境多環境配置
通常一個公司的應程序可能在開發環境(dev)、測試環境(test)、生產環境(prod)中運行。那么是不是需要拷貝不同的安裝包,在不同的環境下運行呢,在 Spring Boot 中一切已經為我們准備就緒,只需要簡單的配置,你的程序就能在不同的環境中運行。
一、Spring Boot 環境設置機制
spring.profiles.active
屬性可以為我們指定當前設置的環境,以此來選擇我們的配置文件。例如我們有配置文件
- application.yml
- application-dev.yml
- application-test.yml
- application-prod.yml
當執行 java -jar xxx.jar --spring.profiles.actvie=test 此時,系統將啟用 application.yml
和 application-test.yml
配置文件。
當執行 java -jar xxx.jar --spring.profiles.actvie=prod 此時,系統將啟用 application.yml
和 application-prod.yml
配置文件。
正是這種配置參數可以決定我們使用哪種配置文件,如果我們把不同環境的配置寫在對應的配置文件中,我們就可以實現多環境機制。
二、配置多環境
正如 第一 點所述,我們配置不同的配置文件
- application.yml
- application-dev.yml(開發環境)
- application-test.yml(測試環境)
- application-uat.yml(預發布環境)
- application-prod.yml(生產環境)
三、指定環境
1 在 cmd 命令中指定
java -jar xxx.jar --spring.profiles.actvie=dev
2 在 application.yml 中指定
spring:
profiles:
active: dev
3 在IDEA 編輯器中指定
在運行按鈕(綠色三角形按鈕)旁邊選擇 Edit Configurations...
,在彈出的對話框中 Active profiles 輸入 dev 或其他即可。
這種方法只有在本地調試的時候才生效。
四、程序中獲取 applicaton 中的值
@Component
@ConfigurationProperties(prefix = "springstudy")
public class MultienvConfig {
private String demoname;
public String getDemoname() {
return demoname;
}
public void setDemoname(String demoname) {
this.demoname = demoname;
}
}
五、程序示例
5.1 新建一個工程
- groupId=com.fishpro
- artifactId=springstudy
- 項目名稱 spring-boot-study-multienv
5.2 新增以下文件
默認為 application.properties
直接重命名為 application.yml
,其他三個新建就可以
- application.yml
server:
port: 8081
spring:
profiles:
active: dev
- application-dev.yml(開發環境)
springstudy:
demoname: multienv-dev
- application-test.yml(測試環境)
springstudy:
demoname: multienv-test
- application-uat.yml(預發布環境)
springstudy:
demoname: multienv-uat
- application-prod.yml(生產環境)
springstudy:
demoname: multienv-prod
5.2 新建文件 fishpro.springstudy.MultienvConfig.java
@Component
@ConfigurationProperties(prefix = "springstudy")
public class MultienvConfig {
private String demoname;
public String getDemoname() {
return demoname;
}
public void setDemoname(String demoname) {
this.demoname = demoname;
}
}
5.3 新建 controller/IndexController.java
@Controller
public class IndexController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
MultienvConfig multienvConfig;
@RequestMapping("/")
String index(){
logger.info(multienvConfig.getDemoname());
return "index";
}
}
5.4 運行 SpringstudyApplication.java
右鍵 SpringstudyApplication.java
執行 Run SpringstudyApplication
運行程序 http://localhost:8081/ 在控制台中輸出
2019-07-08 23:37:05.223 INFO 66267 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-07-08 23:37:05.223 INFO 66267 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-07-08 23:37:05.229 INFO 66267 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 6 ms
2019-07-08 23:37:05.252 INFO 66267 --- [nio-8081-exec-1] c.f.s.controller.IndexController : multienv-dev
修改 application.yml 中的配置
server:
port: 8081
spring:
profiles:
active: prod
運行程序 http://localhost:8081/ 在控制台中輸出
2019-07-08 23:42:44.906 INFO 66281 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-07-08 23:42:44.910 INFO 66281 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
2019-07-08 23:42:44.930 INFO 66281 --- [nio-8081-exec-1] c.f.s.controller.IndexController : multienv-prod