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.
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.
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