Ordre des propriétés dans Spring Boot
-
21-12-2019 - |
Question
Je veux écrire mon propre démarreur Spring Boot et le laisser hériter d'un autre démarreur (disons spring-boot-starter-batch).Maintenant, je souhaite définir l'une des propriétés spring-boot-starter-batch sur une valeur par défaut qui diffère de la valeur par défaut de spring-boot-starter-batch (par exemple spring.batch.job.enabled=false
au lieu de vrai).L'utilisateur de mon démarreur pourra toujours le remplacer via application.properties
.
Ce n'est pas vraiment possible, n'est-ce pas ?L'ordre de lecture des propriétés est le suivant :
- Arguments de ligne de commande.
- Propriétés du système Java (
System.getProperties()
). - Variables d'environnement du système d'exploitation.
- Attributs JNDI de
java:comp/env
- UN
RandomValuePropertySource
qui n'a que des propriétés dansrandom.*
. @PropertySource
des annotations sur votre@Configuration
Des classes.- Propriétés de l'application en dehors de votre pot emballé (
application.properties
y compris YAML et variantes de profil). - Propriétés de l'application emballées dans votre pot (
application.properties
y compris YAML et variantes de profil). - Propriétés par défaut (spécifiées à l'aide de
SpringApplication.setDefaultProperties
).
Donc si j'utilise @PropertySource
dans mon démarreur pour définir la propriété, l'utilisateur de mon démarreur ne pourra pas la remplacer via application.properties
.Ne serait-il pas judicieux de modifier l'ordre et de définir @PropertySource
au numéro 8 ?
Ou existe-t-il un moyen d'obtenir ce que je veux ?
La solution
L'ordre de @PropertySource
est définitivement sujet à débat.Avant ce débat, vous devriez pouvoir ajouter vos propres sources de propriétés dans un écouteur ou un initialiseur (comme l'écouteur de fichier de configuration existant).