Spring Boot 多環境如何配置


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.ymlapplication-test.yml 配置文件。

當執行 java -jar xxx.jar --spring.profiles.actvie=prod 此時,系統將啟用 application.ymlapplication-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM