Comme je le vois actuellement, j'ai 5 profils de base de données possibles
actuellement, j'ai postgres configuré pour exécuter l'application, et h2 configuré pour tester via un application.properties
différent dans Java/resource
s vs test/resources
quel est le moyen le plus simple de modifier les informations de connexion à la base de données pour ces scénarios?
Comme M. Deinum le mentionne dans son commentaire, le moyen le plus simple consiste à utiliser configuration spécifique au profil .
Spring Boot vous permet d’avoir un fichier de configuration commun (application.properties
), puis plusieurs autres fichiers, chacun spécifique à un profil (application-${profile}.properties
).
Par exemple:
application.properties
- Configuration communeapplication-dev.properties
- Configuration pour le profil devapplication-ci.properties
- Configuration pour les profils ciSi votre application s'exécute avec un profil "ci" par exemple, le fichier de configuration par défaut ainsi que le fichier de configuration ci (qui contiendrait les propriétés de configuration de la source de données pour le profil ci) seront chargés.
Pour changer de profil, vous pouvez utiliser l'une des options suivantes:
-Dspring.profiles.active=ci
--spring.profiles.active=dev
Pour les tests unitaires, vous pouvez utiliser l'annotation @ActiveProfiles("test")
sur vos classes de tests pour indiquer à Spring que les tests unitaires doivent être exécutés avec un profil de test.
De plus, si vous ne souhaitez pas stocker les informations d'identification de la base de données de production avec votre code source, vous pouvez spécifier un fichier de configuration externe lorsque vous déployez votre application en production:
--spring.config.location=/srv/myapp/config.properties
-Dspring.config.location=/srv/myapp/config.properties
La réponse compacte pour le scénario ci-dessus consisterait à créer un seul fichier application.yml et à créer différents profils en fonction des besoins, dans votre cas -dev, -ci et -prod et à fournir les informations de base de données en conséquence.
Exemple d'exemple:
spring:
profiles.active: development
---
spring:
profiles: development
datasource:
db-person:
url: jdbc:Oracle:thin:@db_person_dev
username: username
password: pwd
driver-class-name: Oracle.jdbc.OracleDriver
test-on-borrow: true
validation-query: SELECT 1 FROM dual
db-contract:
url: jdbc:Oracle:thin:@db_contract_dev
username: username
password: pwd
driver-class-name: Oracle.jdbc.OracleDriver
test-on-borrow: true
validation-query: SELECT 1 FROM dual
---
spring:
profiles: test
datasource:
db-person:
url: jdbc:Oracle:thin:@db_person_test
username: username
password: pwd
driver-class-name: Oracle.jdbc.OracleDriver
test-on-borrow: true
validation-query: SELECT 1 FROM dual
db-contract:
url: jdbc:Oracle:thin:@db_contract_test
username: username
password: pwd
driver-class-name: Oracle.jdbc.OracleDriver
test-on-borrow: true
validation-query: SELECT 1 FROM dual
---
spring:
profiles: production
datasource:
db-person:
url: jdbc:Oracle:thin:@db_person_prod
username: username
password: pwd
driver-class-name: Oracle.jdbc.OracleDriver
test-on-borrow: true
validation-query: SELECT 1 FROM dual
db-contract:
url: jdbc:Oracle:thin:@db_contract_prod
username: username
password: pwd
driver-class-name: Oracle.jdbc.OracleDriver
test-on-borrow: true
validation-query: SELECT 1 FROM dual
---
Pour plus de compréhension et un exemple simple, vous pouvez vous référer à ce lien .