序言
大家好,我是老馬。
平時一直在使用 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.yamlspring: 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 可以非常方便的達到環境隔離的效果,只需要指定對應的啟動命令即可。
我是老馬,期待與你的下次重逢。