首頁>技術>

序言

大家好,我是老馬。

平時一直在使用 springboot,卻總感覺對於其理解不深入,於是有兩個這個系列的整理。

主要是為了系統的學習一下 springboot,殘缺補漏一下。主要翻譯自官方文件,結合自己的實際使用。

配置

場景

有很多公司都有配置中心,保證不同的環境不同的配置。

有時候也可以 maven 專案也可以直接根據 profile 配置啟用,比如:

mvn clean install -P test

啟用對應的配置。

springboot 也提供了類似的配置方式。

例子目錄
├─java│  └─com│      └─github│          └─houbb│              └─spring│                  └─boot│                      └─learn│                          └─profile│                                  Application.java│└─resources        application-prod.yaml        application-test.yaml        application.yaml
配置

application-xxx.yaml 是一種約定的環境命名方式。

application-prod.yaml
spring:  profiles:    active: prod

這裡用來指定啟用的環境

application-test.yaml

測試環境配置:

server:  port: 8080
application-prod.yaml

生產環境配置:

server:  port: 18080
測試程式碼Application.java
@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);        Environment environment = context.getBean(Environment.class);        String env = environment.getProperty("spring.profiles.active");        String port = environment.getProperty("server.port");        System.out.println(env + " start at http://localhost: " + port );    }}

我們可以看到日誌

prod start at http://localhost: 18080

如果想切換環境,改一下配置即可。

idea 配置

有時候我們想直接使用 idea 進行 debug。

其實也可以透過 idea 進行配置。

命令列啟用
java -jar --spring.profiles.active=dev xxxx.jar

這個也可以配置,可能麻煩一點。

設定虛擬機器引數啟用

這個相對比較簡單

你可以透過設定Java虛擬機器引數的方式來啟用指定profile:

[vm options:] -Dspring.profiles.action=dev
指定 profile 生效

看了下官方文件,還有一個比較強大的功能。

任何 @Component,@Configuration 或 @ConfigurationProperties 都可以用 @Profile 標記,以限制其載入時間。

可以指定對應的 bean 或者配置,在指定的環境下才生效。

@Configuration(proxyBeanMethods = false)@Profile("production")public class ProductionConfiguration {    // ...}

這個應用場景老馬倒是沒有使用過,不過有一說一,確認非常的強大靈活。

小結

不同的環境,使用不同的配置,基本是所有的 web 應用都需要的一個特性。

對於沒有配置中心的小型公司或是輕量的專案,使用 springboot 的 profile 可以非常方便的達到環境隔離的效果,只需要指定對應的啟動命令即可。

我是老馬,期待與你的下次重逢。

15
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Redis中的字典和HashMap有什麼不同?