Eigentumsordnung in Spring Boot
-
21-12-2019 - |
Frage
Ich möchte meinen eigenen Spring Boot-Starter schreiben und ihn von einem anderen Starter erben lassen (sagen wir spring-boot-starter-batch).Jetzt möchte ich eine der Spring-Boot-Starter-Batch-Eigenschaften auf einen Standardwert festlegen, der sich vom Standardwert von Spring-Boot-Starter-Batch unterscheidet (z. B spring.batch.job.enabled=false
statt wahr).Der Benutzer meines Starters soll es weiterhin überschreiben können application.properties
.
Das ist doch nicht wirklich möglich, oder?Die Reihenfolge zum Lesen von Eigenschaften ist die folgende:
- Kommandozeilenargumente.
- Java-Systemeigenschaften (
System.getProperties()
). - Betriebssystemumgebungsvariablen.
- JNDI-Attribute von
java:comp/env
- A
RandomValuePropertySource
das hat nur Eigenschaften inrandom.*
. @PropertySource
Anmerkungen zu Ihrem@Configuration
Klassen.- Anwendungseigenschaften außerhalb Ihres verpackten Glases (
application.properties
einschließlich YAML und Profilvarianten). - Anwendungseigenschaften in Ihrem Glas verpackt (
application.properties
einschließlich YAML und Profilvarianten). - Standardeigenschaften (angegeben mit
SpringApplication.setDefaultProperties
).
Also, wenn ich benutze @PropertySource
in meinem Starter, um die Eigenschaft festzulegen, kann der Benutzer meines Starters sie nicht über überschreiben application.properties
.Wäre es nicht sinnvoll, die Reihenfolge und das Set zu ändern? @PropertySource
bei Nummer 8?
Oder gibt es eine Möglichkeit, das zu erreichen, was ich will?
Lösung
Die Reihenfolge von @PropertySource
steht auf jeden Fall zur Debatte.Vor dieser Debatte sollten Sie jedoch in der Lage sein, Ihre eigenen Eigenschaftsquellen in einem Listener oder Initialisierer (wie dem vorhandenen Konfigurationsdatei-Listener) hinzuzufügen.