Групування конфігурації мікросервісу залежно від середовища (dev, qa, prod тощо) з використанням профілів Spring Boot

Spring надає чудовий інструмент для групування властивостей конфігурації у так звані профілі (dev, qa, prod тощо), що дозволяє активувати кілька налаштувань залежно від активного профілю.

Профілі ідеально підходять для налаштування нашого додатку під різні середовища, але також можуть використовуватися в інших випадках, таких як створення Bean на основі профілю тощо.

Таким чином, профіль може впливати на завантажені властивості додатку та біні, що завантажуються у контекст Spring.

Зверніть увагу, що за замовчуванням активним є профіль default. Spring Boot завантажує всі властивості з application.properties в цей профіль.

Ми можемо визначати профілі в:

  • Файлах властивостей (наприклад, application-dev.properties)
  • YAML файлах (наприклад, application.yml)
  • Java коді (програмно активуючи профілі)

Ми можемо активувати конкретний профіль за допомогою властивості spring.profiles.active, яку можна передати як аргумент командного рядка під час запуску або додати до стандартного application.properties.

Давайте почнемо з простого прикладу.

Створіть три файли в папці src/main/java/resource, назвавши їх application.yml, application-qa.yml, application-prod.yml.

application.yml

server:  
 port: 8081  
spring:  
 application:  
 name: "ProductService"  
 data:  
 mongodb:  
 uri: 'mongodb+srv://rijo:[email protected]/product-service?retryWrites=true&w=majority&appName=productCluster'  

message:  
 env: "dev environment"

application-qa.yml

spring:  
 data:  
 mongodb:  
 uri: 'mongodb+srv://rijo:[email protected]/product-service?retryWrites=true&w=majority&appName=productCluster'  

message:  
 env: "qa environment"

application-prod.yml

spring:  
 data:  
 mongodb:  
 uri: 'mongodb+srv://rijo:[email protected]/product-service?retryWrites=true&w=majority&appName=productCluster'  

message:  
 env: "prod environment"

Створіть простий REST контролер, який має один кінцевий точку, що показує значення властивості message.env, наданої у вищезгаданих файлах конфігурацій.

@RestController  
@RequestMapping(value = "/api/v1/product", produces = MediaType.APPLICATION_JSON_VALUE)  
public class ProductController {  
 @Value("${message.env}")  
 String env;  

 @GetMapping("/env")  
 public ResponseEntity getEnv() {  
 return ResponseEntity.status(HttpStatus.OK).body(env);  
 }  
}

Тепер запустіть додаток і зверніться до кінцевої точки /api/v1/product/env, яка поверне рядок "dev environment".

Тепер перезапустіть додаток і передайте spring.profiles.active=dev як змінну командного рядка.

Ви можете використовувати команду java -jar app.jar — spring.profiles.active=dev, або використати конфігурацію запуску в IntelliJ для передачі spring.profiles.active.

pic

Тепер знову зверніться до кінцевої точки /api/v1/product/env, і вона поверне рядок "prod environment".

Перекладено з: Grouping microservice configuration based on the environment(dev, qa, prod etc), using Spring Boot profiles

Leave a Reply

Your email address will not be published. Required fields are marked *