web-dev-qa-db-fra.com

Comment définir correctement les différents profils Spring dans le fichier bootstrap (pour que Spring Boot cible différents serveurs Cloud Config))?

Nous avons différents serveurs de configuration par environnement. Chaque application Spring Boot doit cibler son serveur de configuration correspondant. J'ai essayé d'y parvenir en définissant des profils dans le fichier bootstrap.properties, par exemple:

spring.application.name=app-name
spring.cloud.config.uri=http://default-config-server.com

---
spring.profiles=dev
spring.cloud.config.uri=http://dev-config-server.com

---
spring.profiles=stage
spring.cloud.config.uri=http://stage-config-server.com

---
spring.profiles=prod
spring.cloud.config.uri=http://prod-config-server.com

Et puis je mets le cla -Dspring.profiles.active=dev mais le serveur de configuration chargé est toujours le dernier défini dans le fichier (c'est-à-dire que le serveur de configuration prod sera chargé dans les paramètres ci-dessus, puis si prod est supprimé, l'étape sera chargée).

Est-il possible de définir des profils bootstrap pour le serveur de configuration cloud? J'ai suivi cet exemple mais je n'arrive pas à le faire fonctionner. Pour ce que ça vaut, ces profils fonctionne très bien pour charger la bonne configuration (c'est-à-dire que app-name-dev.properties se chargera si le profil de développement est actif), mais ne sont pas extraits du bon serveur de configuration.

14
dev_feed

La spécification de profils différents dans un seul fichier prend uniquement en charge les fichiers YAML et ne s'applique pas aux fichiers de propriétés. Pour les fichiers de propriétés, spécifiez un environnement spécifique bootstrap-[profile].properties pour remplacer les propriétés de la valeur par défaut bootstrap.properties.

Donc, dans votre cas, vous obtiendrez 4 fichiers bootstrap.properties, bootstrap-prod.properties, bootstrap-stage.properties et bootstrap-dev.properties.

Cependant, au lieu de cela, vous ne pouvez également fournir que la valeur par défaut bootstrap.properties et lors du démarrage de l'application, remplacez la propriété en passant un -Dspring.cloud.config.uri=<desired-uri> à votre application.

Java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url>

Cela aura priorité sur les valeurs configurées par défaut.

18
M. Deinum
I solved a similar problem with an environment variable in Docker. 

bootstrap.yml

spring:
  application:
    name: dummy_service
  cloud:
    config:
      uri: ${CONFIG_SERVER_URL:http://localhost:8888/}
      enabled: true
  profiles:
    active: ${SPR_PROFILE:dev}

Dockerfile

ENV CONFIG_SERVER_URL=""
ENV SPR_PROFILE=""

Docker-compose.yml

version: '3'

services:

  dummy:
    image: xxx/xxx:latest
    restart: always
    environment:  
      - SPR_PROFILE=docker
      - CONFIG_SERVER_URL=http://configserver:8888/
    ports:
      - 8080:8080
    depends_on:
      - postgres
      - configserver
      - discovery
5
jeton