Spring Boot bietet zwei häufig verwendete Konfigurationsdateien, nämlich Eigenschaftendatei und YML -Datei. Ihre Funktion besteht darin, den Standardwert der Spring -Boot -Automatikkonfiguration zu ändern. Im Vergleich zu Eigenschaftendateien sind YML -Dateien jünger und haben viele Fallstricke. Es kann gesagt werden, dass Xiao er erfolgreich ist und Xiao er scheitert. YML bestimmt die Hierarchiebeziehung durch Leerzeichen, bei der es sich um eine Konfigurationsdateistruktur handelt, die jedoch aufgrund unbedeutender Räume auch die Hierarchiebeziehung zerstört. Dieses Kapitel konzentriert sich auf die Syntax von YML und die Entnahme von Werten aus Konfigurationsdateien. Worauf warten Sie noch? Komm und studiere schnell!
Technologie: YAML, Eigenschaftensyntax, die Verwendung von Konfigurationsproperties und Wertanmerkungen, die Verwendung von Konfigurationsdatei -Platzhaltern
Hinweis: Dieses Kapitel konzentriert sich auf die Syntax von YAML und die Verwendung von Konfigurationsprüfungen. Bitte wechseln Sie zu GitHub, um Code zu testen und Code zu vervollständigen. Freunde, die es mögen, können auf einen Stern klicken.
Quellcode: https://github.com/itdragonblog/dayup/tree/master/springboot/spring-boot-yml
Artikelverzeichnisstruktur:
1. Einführung in Yaml
YML ist eine Datei in YAML-Sprache (YAML Ain't Markup-Sprache), die datenzentriert ist und für Konfigurationsdateien besser geeignet ist als JSON, XML usw.
Im Vergleich zu XML hat YML einen weniger strukturierten Code, was die Daten direkter und deutlicher auf einen Blick macht.
Was ist mit YML und JSON? Niemand ist gut oder schlecht, das Richtige ist das Beste. Die Syntax von YML ist elegant als JSON mit mehr Standardanmerkungen und für Konfigurationsdateien geeignet. Als Maschinenaustauschformat ist JSON stärker als YML und eignet sich besser für den Datenaustausch für API -Aufrufe.
1) YAML -Syntax
Kontroll hierarchische Beziehungen durch den Grad der Eindrücke von Räumen. Die Anzahl der Räume ist nicht wichtig, solange die Leerzeichen links ausgerichtet sind, werden sie als das gleiche Niveau angesehen. Beachten Sie, dass Registerkarten nicht anstelle von Leerzeichen verwendet werden können. Und Fallempfindlichkeit. Es unterstützt drei Datenstrukturen: wörtlicher Wert, Objekt und Array und auch zusammengesetzte Strukturen.
Literaler Wert: String, Boolesche Typ, numerischer Wert, Datum. Saiten werden standardmäßig nicht zitiert, und einzelne Zitate entkommen Sonderzeichen. Datumsformat unterstützt yjjy/mm/dd hh: mm: ss
Objekt: besteht aus Schlüsselwertpaaren, Daten in Form von Schlüssel: (Speicherplatz). Die Räume nach dem Dickdarm sind notwendig. Jeder Satz von Schlüsselwertpaaren nimmt eine Linie ein und der Grad der Eindrücke muss konsistent sein. Sie können auch die Inline-Schreibmethode verwenden: {K1: v1, .... KN: vn}
Array: besteht aus Daten mit einer Form von -(Raum-) Wert. Die Räume hinter der kurzen horizontalen Linie sind erforderlich. Jeder Datensatz nimmt eine Zeile ein und der Grad der Eindrücke muss konsistent sein. Sie können auch die Inline-Schreibmethode verwenden: [1,2, ... n]
Zusammengesetzte Struktur: Jede Kombination der oben genannten drei Datenstrukturen
Ii) Anwendung von Yaml
Erstellen Sie eine Spring Start Global Configuration Datei Application.yml und konfigurieren Sie Eigenschaftsparameter. Es gibt hauptsächlich Saiten, Saiten mit Sonderzeichen, booleschen Typen, Werten, Sammlungen, Inline-Sammlungen, Inline-Objekten und Sammlungsobjekten.
yaml: str: String can be without quotes specialStr: "Double quotes directly output /n special characters" specialStr2: 'Single quotes can escape /n special characters' flag: false num: 666 Dnum: 88.88 list: - one - two - two set: [1,2,2,3] map: {k1: v1, k2: v2} positions: - name: ITDragon salary: 15000.00 - name: ITDragonBlog Gehalt: 18888.88Erstellen Sie die Entitätsklasse yamlentity.java erhalten Sie den Eigenschaftswert in der Konfigurationsdatei, erhalten Sie den angegebenen Wert in der Konfigurationsdatei, indem Sie @ConfigurationProperties annotieren und in die Entitätsklasse injizieren. Bitte betrachten Sie die spezifischen Testmethoden und das Prinzip, Werte zu erhalten!
import org.springframework.boot.context.properties.configurationProperties; import org.springframework Wert * 2. Die Anzahl der Leerzeichen auf der linken Seite jedes Zeilenparameters bestimmt die Ebene des Parameters und gilt nicht zufällig. */@Component@configurationProperties (Präfix = "yaml") öffentliche Klasse Yamlentity {// literaler Wert, String, boolean, numerische private String Str; // normale Zeichenfolge private Zeichenfolge SpecialSstr; // Escape Special String Private String SpecialStr2; // Ausgabe von speziellem String privates Boolean Flag; // Boolean Typ Private Ganzzahl num; // Integer Private Double Dnum; // Decimal // Array, Liste und Set, zwei Möglichkeiten zum Schreiben: Der erste: - Space -Wert, jeder Wert nimmt eine Zeile ein und muss eingerückt und ausgerichtet sein; die zweite: [1,2, ... n] Inline-Schreiben privater Liste <objekt> Liste; // Auflistige wiederholbare Set Private Set <Object> set; // SET kann nicht wiederholt werden. Die zweite: {Schlüssel: Wert, ....} Inline-Schreiben privater Karte <String, Objekt> Karte; // MAP KV Private List <Position> Positionen; // Verbindungsstruktur, Sammelobjekt // Getter, Setter, ToString -Methoden auslassen}3) YML -Zusammenfassung
1. Die Zeichenfolge kann ohne Zitate sein. Wenn doppelte Zitate hinzugefügt werden, werden Sonderzeichen ausgegeben. Wenn keine einzigen Zitate hinzugefügt werden, werden Sonderzeichen entkommen.
2. Für den Array -Typ müssen sich hinter kurzen horizontalen Linien Räume befinden. Für den Objekttyp müssen sich hinter Colon Räume befinden;
3.. YAML kontrolliert hierarchische Beziehungen basierend auf dem Grad der Raumeinstufung, aber der Registerkartenschlüssel kann nicht anstelle von Leerzeichen verwendet werden, und es ist fallsempfindlich.
4. Wie kann man einen Programmierer zum Absturz bringen? Fügen Sie der YML -Datei ein paar Plätze hinzu! (〃> Dish <)
2. Einführung in Eigenschaften
Jeder verwendet oft Eigenschaftendateien, daher werde ich sie hier kurz vorstellen. Die Syntaxstruktur ist wie: Key = Wert. Achten Sie auf das Problem des chinesischen verstümmelten Code und müssen in ASCII transkodiert werden. Die Details sind wie folgt:
userinfo.account=itdragonBloguserinfo.age=25userinfo.active=trueuserinfo.created-date=2018/03/31 16:54:30userinfo.map.k1=v1userinfo.map.k2=v2userinfo.list=one,two,threeuserinfo.position.name=Java architect userInfo.position.salary = 19999.99
Nehmen Sie Werte aus Konfigurationsdateien und injizieren Sie sie in Entitätsklassen, die mit YAML identisch sind.
import org.springframework.boot.context.properties.configurationProperties; import org.springframework.stereotype.comPonent; importieren java.util.date import Java.util In der Konfigurationsdatei (der Wert wird über Präfix gefunden)*/@component@configurationProperties (Präfix = "userInfo") öffentliche Klasse UserInfo {private String -Konto; privates Ganzzahlalter; privat boolean aktiv; privates Datum erstelltDate; private map <String, Objekt> Karte; private Liste <Object> Liste; Privatposition; // Getter-, Setter-, ToString -Methoden auslassen}3. Konfigurationsdateiwert
Spring Boot erhält Eigenschaften von Konfigurationsdateien über Konfigurationsproperties Annotation. Aus dem obigen Beispiel können wir feststellen, dass die Annotation des Konfigurationsproperties die Daten angeben kann, die durch Einstellen von Präfix in Stapeln importiert werden müssen. Unterstützt es, komplexe Daten wie Literale, Sammlungen, Karten, Objekte usw. zu erhalten. Gibt es noch etwas über Konfigurationsproperties -Annotation? Was ist der Unterschied zwischen IT und Spring Value Annotation? Lasst uns unter Berücksichtigung dieser Fragen weiter nach unten schauen. (๑ • ̀ㅂ • ́) و✧
A) Vor- und Nachteile von Konfigurationspropertien und Wert
Vor- und Nachteile von Konfigurationsproperties Anmerkungen
1. Sie können Injektionseigenschaften aus der Konfigurationsdatei stapeln.
2. unterstützt das Erhalten komplexer Datentypen;
3. Die Anforderungen für die Anpassung von Attributnamen sind niedrig, z. B. Benutzername, User_Name, Benutzername und User_Name können alle Werte abrufen.
4. Unterstützung JSR303 Datenüberprüfung von Java;
5. Der Nachteil ist, dass es keine mächtigen Spel -Ausdrücke unterstützt;
Die Vor- und Nachteile der Wertschöpfungsanmerkungen sind genau das Gegenteil. Es kann nur den Einspritzwert nacheinander konfigurieren; Es unterstützt keine komplexen Datentypen wie Arrays und Sammlungen. Es unterstützt keine Datenüberprüfung. Es hat strenge Anforderungen für die Anpassung des Eigenschaftsnamens. Das größte Merkmal ist, dass es Spel -Ausdrücke unterstützt und es reicher Funktionen macht.
2) @ConfigurationProperties detaillierte Erklärung
Schritt 1: Abhängigkeiten importieren. Um Konfigurationsproperties-Annotation zu verwenden, müssen Sie den Abhängigkeitsprozessor für Spring-Boot-Konfiguration importieren.
Schritt 2: Konfigurieren Sie die Daten. Konfigurieren Sie in der Konfigurationsdatei application.yml die von ITDragon vorangestellten Attributparameter und die Parameter wörtliche Werte und Arrays, die verwendet werden, um festzustellen, ob die Fähigkeit, komplexe Attribute zu erhalten, unterstützt wird.
Schritt 3: Übereinstimmung mit den Daten. Fügen Sie Annotation ConfigurationProperties in die Klasse hinzu und setzen Sie den Eigenschaftswert des Präfix -Eigenschaft auf ITdragon. Und fügen Sie diese Klasse zum IOC -Container von Spring hinzu.
Schritt 4: Überprüfen Sie die Daten. Datenüberprüfung hinzufügen, validierte Annotation, die Datenüberprüfung aktivieren und testen, ob sie die Datenüberprüfung unterstützt.
Schritt 5: Testen Sie, ob die Annotation des Konfigurationsproperties Spelausdrücke unterstützt.
Abhängigkeiten importieren: pom.xml fügen Sie Spring-Boot-Konfigurationsprozessor-Abhängigkeiten hinzu
<Depopentcy> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Konfigurationsprozessor </artifactid> <optional> true </optional> </abhängig>
Konfigurationsdaten: application.yml Konfigurationseigenschaftsparameter, Spitzname wird verwendet, um die Lockerung der Übereinstimmungseigenschaften zu beurteilen. Wenn Sie in Nick_Name geändert werden, können Sie den Wert trotzdem erhalten.
ITDRAGON: Spitzname: Itdragonblog E-Mail: [email protected] iPhone: 1234567890 Fähigkeiten: [Java, SQL, HTML] erstellt_date: 2018/03/31 15:27:30
Übereinstimmen und überprüfen Sie die Daten:
import org.springframework.boot.context.properties.configurationProperties; import org.springframework.stereotype.comPonent; * KonfigurationProperties Annotationssyntaxklasse * Schritt 1: Abhängigkeit von Spring-Boot-Konfigurationsprozessor importieren; * Schritt 2: Fügen Sie die durch ConfigurationProperties -Annotation geänderte Klasse zum IOC -Container von Spring hinzu. * Schritt 3: Setzen Sie das Präfixattribut und geben Sie das Präfix an, das injiziert werden muss. * Schritt 4: Annotation für Datenüberprüfung hinzufügen, um die Datenüberprüfung zu aktivieren. ** Hinweis:* 1. Spitzname und CreatedDate befinden sich in der YML -Konfigurationsdatei, und die entsprechenden Parameter sind Meshes bzw. Unterstriche, um ihre Lockerheit über die Anpassung von Attributnamen zu testen ConfigurationPropertieSentity {private String -Spitzname; // erfolgreich analysieren, lose Matching -Attribute private Zeichenfolge -E -Mails unterstützen; // @email // Parsen fehlgeschlagen, und die Datenüberprüfung war erfolgreich: BindvalidationException: Bindung von Validierungsfehlern auf ITdragon Private String iPhone; private Liste <string> Fähigkeiten; privates Datum erstelltDate; // erfolgreich analysieren, lose Matching-Attribute unterstützt // @ConfigurationProperties ("#{(1+2-3)/4*5}") privater String-Operator; // Syntaxfehler, nicht Unterstützung von Spels Expression: Nicht für Feld anwendbar // Getter, Setter, ToString -Methoden} auslassen}3) @Value detaillierte Erklärung
Der vorherige Blog hat die Verwendung von Wertschettern eingeführt, und hier finden Sie eine kurze Erklärung.
Schritt 1: Value -Annotation zum Attribut hinzufügen und Wert aus der Konfigurationsdatei über den Parameter "Einstellungseinstellung" $ injizieren;
Schritt 2: Ändern Sie den Parameterwert in $ {itdragon.ceatred_date} und ändern Sie ihn in $ {itdragon.ceatredDate}, um zu testen, ob die Parsen erfolgreich sein kann;
Schritt 3: Fügen Sie die Datenüberprüfung validierte Annotation hinzu, aktivieren Sie die Datenüberprüfung und testen Sie, ob sie die Datenüberprüfung unterstützt.
Schritt 4: Testen Sie, ob die Wertschettern Spel -Ausdrücke unterstützt;
import org.springframework.beans.factory.annotation Syntaxklasse* Schritt 1: Annotationswerteinspritzparameter in den Attributen* Schritt 2: Fügen Sie die durch die Wertannotation geänderte Klasse zum Spring -IOC -Container hinzu. * Schritt 3: Anmerkung der Datenüberprüfung hinzufügen, um zu überprüfen, ob die Datenüberprüfung unterstützt wird. * * Hinweispunkte: * 1. Spitzname und erstelltDate in der YML -Konfigurationsdatei, die entsprechenden Parameter sind Maschen bzw. Unterstriche, um ihre Lockerheit bei den Anpassungsattributnamen zu testen * 2. Da Annotationen zur Überprüfung von Mailbox -Überprüfungen zum iPhone hinzugefügt werden, können Sie den Test weiterhin bestehen. * 3. Die komplexe Datenstruktur wird nicht unterstützt, und der Eingabeaufforderungsfehler ist der erste wie der erste: IllegalArgumentException: konnte den Platzhalter nicht beheben 'itdragon.abilities' im Wert "$ {itdragon.abilities}" */@component@validatedPublic Class ValueEntity {@value ("$ {itdragon.name}}") private String Nickname; @Value ("$ {itdragon.email}") private String -E -Mail; @Email @Value ("$ {itdragon.iphone}") // Das Parsen ist erfolgreich und die Datenüberprüfung wird nicht unterstützt, der private String iPhone; // @Value ("$ {itdragon.eatreddate}") // Die Parsen ist, die komplexe Datenstruktur nicht unterstützt. // Fehler analysieren, unterstützt keine losen passenden Eigenschaften und muss ausschließlich ein konsistentes privates Datum erstellt werden. // Die leistungsstarke Seite des Wertes Annotation: Unterstützt Spel Expression @Value ("#{(1+2-3)/4*5}") // Arithmetic Operation Private String Operator; @Value ("#{1> 2 || 2 <= 3}") // Relational Operation Private Boolean Vergleich; @Value ("#{SystemProperties ['java.version']}") // Systemkonfiguration: os.name private String SystemProperties; @Value ("#{t (java.lang.math) .Abs (-18)}") // Ausdruck private String mapexpression; // Getter-, Setter-, ToString -Methoden auslassen}4) Zusammenfassung des Konfigurationsdateiwerts
1. ConfigurationProperties -Anmerkungen unterstützen die Stapelinjektion, während Wertanmerkungen für eine einzelne Injektion geeignet sind.
2. Konfigurationsproperties -Anmerkungen unterstützen die Datenüberprüfung, während Wertschwere dies nicht tun.
3.. KonfigurationProperties Annotationen unterstützen lose Übereinstimmungseigenschaften, während Wertanmerkungen streng mit den Eigenschaften übereinstimmen müssen.
4. Konfigurationsproperties unterstützt keine leistungsstarken Spel -Ausdrücke, aber der Wert unterstützt sie.
4. Konfigurationsdatei -Platzhalter
Platzhalter und Zufallszahlen sind relativ einfach, daher werde ich den Code hier direkt veröffentlichen. Was beachtet werden sollte ist:
1. Der Wert des Platzhalters muss der vollständige Weg sein
2. Setzen Sie den Standardwert des Platzhalters, es darf nach dem Dickdarm keinen Platz geben
ran: # The prefix here cannot be random, ran-value: ${random.value} ran-int: ${random.int} ran-long: ${random.long} ran-int-num: ${random.int(10)} ran-int-range: ${random.int[10,20]} ran-placeholder: placeholder_${ran.ran-value: There cannot be spaces Hier, und der Schlüssel ist der vollständige Weg} import org.springframework.boot.context.properties.configurationProperties; import org.springframework.stereotype.comPonent;/*** Zufällige Nummer und Platzhalter -Syntaxklasse*/@component@configurationProperties (Prefix = "ran"). // nach dem Zufallsprinzip eine private Integer ranint von String generieren; // nach dem Zufallsprinzip einen ganzzahligen privaten langen Ranlong erzeugen; // nach dem Zufallsprinzip einen langen Ganzzahl privaten Ganzzahl ranintnum erzeugen; // Randomly generate an integer private within a specified range Integer ranIntRange;// randomly generate an integer private String ranPlaceholder;// placeholder// omit getter, setter, toString method e} test code: @RunWith(SpringRunner.class)@SpringBootTestpublic class SpringBootYmlApplicationTests { @Autowired private UserInfo userInfo; @Autowired Private Yamlentity Yamlentity; @Autowired Private ConfigurationPropertieStity ConfigurationPropertieStary; @Autowired private valueentity Valueentität; @Autowired Private Randomentity Randomentity; @Test public void contextloads () {// system.out.println ("yaml grammatik:" + yamlentity); // system.out.println ("userInfo:" + userInfo); // system.out.println ("configurationProperties grammar:" + configurationProperties); " + valententity); System.out.println ("Zufällige Grammatik:" + Randomentity); }}5. Zusammenfassung
1. Spring Boot unterstützt Konfigurationsdateien in zwei Formaten, unter denen die Datenstruktur von YAML klarer ist als Eigenschaften.
2. YAML ist eine Sprache, die speziell zum Schreiben von Konfigurationsdateien verwendet wird, die sehr prägnant und leistungsfähig sind.
3. YAML hat strenge Anforderungen an den Leerzeichen und kann nicht durch die Registerkarte ersetzt werden.
4. YAML bestimmt das Niveau durch den Grad der Raumeinstufung, wobei Räume dem Dickdarm und den Räumen folgen der kurzen horizontalen Linie.
5. Konfigurationsproperties -Anmerkungen sind für die Stapelinjektion von Eigenschaften in Konfigurationsdateien geeignet, und Werteanmerkungen eignen sich zum Abrufen eines Elements in der Konfigurationsdatei.
6. KonfigurationProperties -Anmerkungen unterstützen die Datenprüfsumme, um komplexe Daten zu erhalten, und Wertschöpfungsanmerkungen unterstützen Spelausdrücke.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.