Vorwort
Um flexibel in Projekten zu konfigurieren, verwenden wir häufig Konfigurationsdateien. Gemeinsame Konfigurationsdateien sind wie XML und Eigenschaften. Springboot ermöglicht die Verwendung von Eigenschaften und YAML -Dateien als externe Konfigurationen. Die Unterstützung des Compilers für die YAML -Sprache ist jetzt nicht gut genug, und die Eigenschaftendatei wird weiterhin als externe Konfiguration verwendet.
Bevor die Spring Cloud-Konfiguration herauskam, habe ich das ZK-basierte Konfigurationszentrum implementiert und die lokale Eigenschaftenkonfigurationsdatei beseitigt. Das Prinzip ist sehr einfach, aber ich habe mergeProperties() von PropertyPlacePlaTeholderConFigurer nur überladen:
/*** Überladen Sie die Implementierung von Merge -Eigenschaften* Erste Ladedateieigenschaften und dann in die Eigenschaften, die vom ZK -Konfigurationszentrum gelesen wurden // Laden Sie die Konfiguration der übergeordneten Klasseneigenschaften mergeProperties = Super.MergeProperties (); result.putall (mergeProperties); // Laden Sie die Konfiguration aus ZK MAP <String, String> configs = loadZkConfigs (); result.putall (configs); Rückgabeergebnis;}
Diese Implementierung ist in Frühjahrsprojekten recht einfach zu verwenden, aber in letzter Zeit haben einige Spring-Boot-Projekte festgestellt, dass diese Platzhalter-Implementierung und Spring Boots @ConfigurationProperties(prefix = "xxx") nicht gut funktionieren können.
Das heißt, die Eigenschaften sind nicht behoben, und Sie können sie auf @Value -Weise lesen, aber wenn es viele Eigenschaften für @Value gibt, ist es immer noch ziemlich umständlich. Ich neige immer noch dazu, das Präfix von @ConfigurationProperties zu verwenden. Also schaute ich mir die Spring -Boot -Dokumentation an und stellte diese PropertySource fest
Befehl:
* Devtools Globale Einstellungen Eigenschaften in Ihrem Heimverzeichnis (~/.spring-boot-devtools.properties Wenn devtools aktiv ist).
* @TestPropertySource -Anmerkungen zu Ihren Tests.
* @SpringBoottest#Eigenschaften Annotationsattribut für Ihre Tests.
* Befehlszeilenargumente.
* Eigenschaften von Spring_Application_JSON (Inline JSON eingebettet in eine Umgebungsvariable oder eine Systemeigenschaft)
* ServletConfig -Init -Parameter.
* ServletContext -Init -Parameter.
* JNDI -Attribute von Java: Comp/Env.
* Java -Systemeigenschaften (System.getProperties ()).
* OS -Umgebungsvariablen.
* Eine zufällige RandomValuePropertySource, die nur Eigenschaften in zufälligem.*.
* Profilspezifische Anwendungseigenschaften außerhalb Ihres verpackten JAR (Anwendung- {Profil} .Properties und YAML-Varianten)
* Profilspezifische Anwendungseigenschaften in Ihrem Glas verpackt (Application- {Profil} .Properties und YAML-Varianten)
* Anwendungseigenschaften außerhalb Ihres verpackten Glass (Application.Properties und YAML -Varianten).
* Anwendungseigenschaften in Ihrem Glas (application.Properties und YAML -Varianten).
* @PropertySource Anmerkungen in Ihren @Configuration -Klassen.
* Standardeigenschaften (angegeben mit SpringApplication.SetDefaultProperties).
Es ist nicht schwer festzustellen, dass es die Eigenschaften in den Eigenschaften von Java -Systemen überprüfen kann. Das heißt, schreiben Sie einfach die Eigenschaften, die von MergeProperties in Java -Systemrequisiten gelesen, den Quellcode betrachten und einen Eingangspunkt finden.
/*** Überlastung der Immobilien von Überlastungseigenschaften* Entscheiden Sie gemäß den Optionen, ob die fusionierten Requisiten an die Systemeigenschaften geschrieben werden sollen. Spring Boot erfordert * * @param beanfactorytoprocess * @param props fusiongedeigenschaften // in die Systemeigenschaft schreiben if (WritePropStosystem) {// Schreiben Sie alle Eigenschaften an System for Spring Boot Enumeration <?> PropertyNames = props.propertynames (); while (propertyNames.hasmoreElements ()) {String PropertyName = (String) PropertyNames.NextElement (); String PropertyValue = props.getProperty (PropertyName); System.SetProperty (PropertyName, PropertyValue); }}} Um übermäßige Auswirkungen zu vermeiden, wird ein Switch eingestellt, um Systemeigenschaften zu schreiben. Wenn es sich um ein Spring-Boot-Projekt handelt, schalten Sie es ein, um die Auswirkungen auf Online-Startprojekte zu minimieren. Dann lesen @ConfigurationProperties of Spring Boot die Eigenschaften perfekt.
Siehe den spezifischen Code: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor
@OverridePublic Object postProcessBeforeinitialisierung (Objektbean, String Beanname) löst Beansexception aus {configurationProperties Annotation = AnnotationUtils .findannotation (Bean.GetClass (), configurationProperties.class); if (Annotation! } Annotation = this.bean.findfactoryAnnotation (Beanname, configurationProperties.class); if (Annotation! } zurückbean;}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.