Spring Boot fournit deux fichiers de configuration couramment utilisés, à savoir le fichier de propriétés et le fichier YML. Leur fonction consiste à modifier la valeur par défaut de la configuration automatique de Spring Boot. Par rapport aux fichiers de propriétés, les fichiers YML sont plus jeunes et ont de nombreux pièges. On peut dire que Xiao il réussit et échoue Xiao. YML détermine la relation de hiérarchie via des espaces, qui est une structure de fichiers de configuration et claire, mais il détruira également la relation de hiérarchie en raison d'espaces insignifiants. Ce chapitre se concentre sur la syntaxe de YML et prenant des valeurs à partir de fichiers de configuration. Qu'attendez-vous? Venez étudier rapidement!
Technologie: YAML, Syntaxe des propriétés, l'utilisation de configurationproperties et d'annotations de valeur, l'utilisation des espaces réservés des fichiers de configuration
Remarque: Ce chapitre se concentre sur la syntaxe de YAML et l'utilisation d'annotations de configurationProperties. Veuillez passer à GitHub pour tester le code et terminer le code. Des amis qui l'aiment peuvent cliquer sur une étoile.
Code source: https://github.com/itdragonblog/daydayup/tree/master/springboot/spring-boot-yml
Structure du répertoire de l'article:
1. Introduction à Yaml
YML est un fichier dans la langue YAML (YAML AIN't Bualip Language), qui est centré sur les données et est plus adapté aux fichiers de configuration que JSON, XML, etc.
Par rapport à XML, YML a un code moins structuré, ce qui rend les données plus directes et claires en un coup d'œil.
Et YML et JSON? Personne n'est bon ou mauvais, le bon est le meilleur. La syntaxe de YML est élégante que JSON, avec des annotations plus standard, et convient aux fichiers de configuration. En tant que format d'échange de machines, JSON est plus fort que YML et est plus adapté à l'échange de données contre les appels d'API.
1) Syntaxe YAML
Contrôlez les relations hiérarchiques par le degré d'indentation des espaces. Le nombre d'espaces n'est pas important, tant que les espaces de gauche sont alignés, ils sont considérés comme du même niveau. Notez que les onglets ne peuvent pas être utilisés à la place des espaces. Et sensible à la casse. Il prend en charge trois structures de données: la valeur littérale, l'objet et le tableau, et prend également en charge les structures composites.
Valeur littérale: chaîne, type booléen, valeur numérique, date. Les chaînes ne sont pas citées par défaut et les citations simples échapperont aux caractères spéciaux. Le format de date prend en charge les yyyy / mm / dd hh: mm: ss
Objet: se compose de paires de valeurs clés, de données sous forme de clé: (espace) valeur. Les espaces après le côlon sont nécessaires. Chaque ensemble de paires de valeurs clés occupe une ligne et le degré d'indentation doit être cohérent. Vous pouvez également utiliser la méthode d'écriture en ligne: {k1: v1, .... kn: vn}
Array: se compose de données avec une forme de valeur (espace). Les espaces derrière la ligne horizontale courte sont nécessaires. Chaque ensemble de données occupe une ligne et le degré d'indentation doit être cohérent. Vous pouvez également utiliser la méthode d'écriture en ligne: [1,2, ... n]
Structure composite: Toute combinaison des trois structures de données ci-dessus
Ii) Application de YAML
Créez un fichier de configuration global de Spring Boot Application.yml et configurez les paramètres de propriété. Il existe principalement des chaînes, des chaînes avec des caractères spéciaux, des types booléens, des valeurs, des collections, des collections en ligne, des objets en ligne et des objets de collecte.
YAML: STR: String peut être sans citations SpecialStr: "Double Quotes Output / n Caractères spéciaux" Specialstr2: 'Les citations simples peuvent échapper / n Caractères spéciaux' Flag: False Num: 666 Dnum: 88.88 Liste: - One - Two - Two Set: [1,2,2,3] Map: {K1: V1, K2: V2} Posits: - Nom: SALAIRE ITDRONN Salaire: 18888.88Créer une classe d'entité yamlentity.java Obtenez la valeur de propriété dans le fichier de configuration, obtenez la valeur spécifiée dans le fichier de configuration en annotant @configurationproperties et injectez-la dans la classe d'entité. Veuillez continuer à examiner ses méthodes de test spécifiques et le principe d'obtention de valeurs!
Importer org.springframework.boot.context.properties.configurationproperties; import org.springframework.sterreotype. 2. Le nombre d'espaces sur le côté gauche de chaque paramètre de ligne détermine le niveau du paramètre et n'entre pas au hasard. * / @ Composant @ configurationProperties (prefix = "yaml") public class yamlentity {// valeur littérale, chaîne, booléen, chaîne privée numérique str; // String normal String privé Specialstr; // Escape Special String Private String SpecialStr2; // Sortie Special String Special Private Boolean Flag; // Num entier privé de type booléen; // Dnum double privé entier; // décimal // Array, liste et set, deux façons d'écrire: la première: - valeur de l'espace, chaque valeur occupe une ligne et doit être en retrait et aligné; Le second: [1,2, ... n] Liste privée de rédaction en ligne <objet>; // Liste un ensemble privé de set reproduable <objet> set; // Défini ne peut pas être répété Set // Classes de carte et d'entités, deux façons d'écrire: la première: valeur d'espace clé, chaque valeur occupe une ligne et doit être en retrait et aligné; le second: {key: valeur, ....} en ligne écrivant la carte privée <chaîne, objet> map; // Map KV Private List <Position> Positions; // Structure composée, objet de collection // Omit Getter, setter, méthodes de tostring}3) Résumé YML
1. La chaîne peut être sans citations. Si des devis doubles sont ajoutés, des caractères spéciaux seront sortis. Si aucune citation unique n'est ajoutée, des caractères spéciaux seront échappés;
2. Pour le type de tableau, il doit y avoir des espaces derrière des lignes horizontales courtes; Pour le type d'objet, il doit y avoir des espaces derrière le côlon;
3. YAML contrôle les relations hiérarchiques basées sur le degré d'indentation spatiale, mais la clé de l'abat-t-il ne peut pas être utilisée à la place des espaces, et il est sensible à la casse;
4. Comment se bloquer un programmeur? Ajoutez quelques espaces au fichier yml! (〃> Plat <)
2. Introduction aux propriétés
Tout le monde utilise souvent des fichiers de propriétés, donc je les présenterai brièvement ici. Sa structure de syntaxe est comme: key = valeur. Faites attention au problème du code chinois brouillé et doit être transcodé en ASCII. Les détails sont les suivants:
userInfo.Account = itdragonbloguseRinfo.age = 25USERINFO.Active = TrueUserRinfo.Created-Date = 2018 / 03/11 16: 54: 30USERINFO.MAP.K1 = V1USERINFO.MAP.K2 = V2USERINFO.List = One, Two, ThreeUserrinfo.Position.Sposition = Java Architecd userInfo.position.salary = 19999.99
Prenez des valeurs des fichiers de configuration et injectez-les dans des classes d'entités, ce qui est le même que YAML.
Importer org.springframework.boot.context.properties.configurationproperties; import org.springframework.stereteotype.component; import java.util.date; importer java.util.list; import java.util.map; / ** * informations de l'utilisateur * @configurationpropities: toutes Fichier de configuration (la valeur se trouve via Prefix) * / @ Component @ ConfigurationProperties (prefix = "userInfo") public class userInfo {Private String Account; Âge entier privé; Boolean privé actif; Date privée CreatedDate; Carte privée <chaîne, objet> Carte; Liste privée <objet> liste; poste privé; // omettre Getter, setter, méthodes de tostring}3. Valeur de fichier de configuration
Spring Boot obtient des propriétés des fichiers de configuration via la configurationProperties Annotation. À partir de l'exemple ci-dessus, nous pouvons voir que l'annotation ConfigurationProperties peut spécifier les données qui doivent être importées en lots en définissant le préfixe. Prend en charge l'obtention de données complexes telles que les littéraux, les collections, les cartes, les objets, etc. Y a-t-il autre chose sur l'annotation de la configuration desproperties? Quelle est la différence entre elle et l'annotation de la valeur de Spring? Avec ces questions à l'esprit, continuons à regarder en bas. (๑ • ̀ㅂ • ́) و✧
A) Avantages et inconvénients des propriétés de configuration et valeur
Avantages et inconvénients des annotations de configurationproperties
1. Vous pouvez intégrer les propriétés injecter à partir du fichier de configuration;
2. Prend en charge l'obtention de types de données complexes;
3. Les exigences pour les noms d'attribut de correspondance sont faibles, telles que le nom d'utilisateur, user_name, nom d'utilisateur et user_name peuvent toutes obtenir des valeurs;
4. Prise en charge de la vérification des données JSR303 de Java;
5. L'inconvénient est qu'il ne prend pas en charge de puissantes expressions de Spel;
Les avantages et les inconvénients de l'annotation de la valeur sont tout le contraire. Il ne peut configurer la valeur de l'injection un par un; Il ne prend pas en charge les types de données complexes tels que les tableaux et les collections; Il ne prend pas en charge la vérification des données; Il a des exigences strictes pour la correspondance du nom de la propriété. La plus grande fonctionnalité est qu'il prend en charge les expressions de Spel, ce qui le rend plus riche.
2) @ConfigurationProperties Explication détaillée
ÉTAPE 1: les dépendances d'importation. Pour utiliser la configurationProperties Annotation, vous devez importer le processeur de dépendance à Spring-Boot-Configuration de dépendance;
Étape 2: Configurez les données. Dans le fichier de configuration Application.yml, configurez les paramètres d'attribut, préfixés par ITDragon, et les paramètres ont des valeurs littérales et des tableaux, qui sont utilisés pour déterminer si la possibilité d'obtenir des attributs complexes est pris en charge;
Étape 3: Faites correspondre les données. Ajoutez une configuration d'annotation sur la classe et définissez la valeur de propriété de préfixe sur ITDragon. Et ajoutez cette classe au conteneur IOC de Spring.
Étape 4: Vérifiez les données. Ajouter une annotation validée par la vérification des données, activer la vérification des données et tester s'il prend en charge la vérification des données;
Étape 5: Testez si l'annotation de configurationProperties prend en charge les expressions SPEL;
Dépendances d'importation: pom.xml ajouter les dépendances de procédure de configuration de printemps
<dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> printemp-boot-configuration-processor </ artifactId> <Oraloveal> true </opultal> </ Dependency>
Données de configuration: application.yml Paramètres de propriété de configuration, Nick-Name est utilisé pour juger le relâchement des propriétés de correspondance. Si je suis changé en Nick_name, vous pouvez toujours obtenir la valeur.
Itdragon: Nick-Name: Itdragonblog Courriel: [email protected] iPhone: 1234567890 Capacités: [Java, SQL, HTML] Created_Date: 2018/03/31 15:27:30
Correspondre et vérifier les données:
import org.springframework.boot.context.properties.configurationproperties; import org.springframework.sterreotype. ConfigurationProperties Annotation Syntax Class * Étape 1: Importer Dependency-Boot-Boot-Configuration-Processor; * Étape 2: Ajoutez la classe modifiée par configurationProperties Annotation au conteneur IOC de Spring; * Étape 3: Définissez l'attribut de préfixe et spécifiez le préfixe qui doit être injecté; * Étape 4: Ajouter une annotation de vérification des données pour permettre la vérification des données; * * REMARQUE: * 1. Le surnom et CreatedDate sont dans le fichier de configuration YML, et les paramètres correspondants sont des maillages et des sous-oreurs, respectivement, utilisés pour tester leur relâchement des noms d'attribut correspondants * 2. Test de messagerie et iPhone qui prend en charge JSR303 Vérification des données * 3. Test des capacités qui prend en charge les structures de données complexes * / @ componentedpublic ConfigurationPropertiseSentity {Private String surnom; // analyse avec succès, en prenant en charge les attributs de correspondance lâches e-mail de chaîne privée; // @Email // l'analyse a échoué, et la vérification des données a été réussie: BindValidationException: erreurs de validation de liaison sur ITDragon Private String iPhone; Capacités de liste privée <string>; Date privée CreatedDate; // analyse avec succès, prenant en charge les attributs de correspondance lâche // @configurationproperties ("# {(1 + 2-3) / 4 * 5}") Opérateur de chaîne privé; // Erreur de syntaxe, sans prendre en charge l'expression de Spel: non applicable au champ // omettre Getter, setter, méthodes de tostring}3) Explication détaillée de @Value
Le blog précédent a introduit l'utilisation des annotations de valeur, et voici une brève explication.
Étape 1: Ajouter une annotation de valeur à l'attribut et injecter la valeur du fichier de configuration via le paramètre de réglage $ {};
Étape 2: Modifiez la valeur du paramètre dans $ {itdragon.ceatred_date} et modifiez-la en $ {itdragon.ceatredDate} pour tester si l'analyse peut réussir;
Étape 3: Ajouter l'annotation validée par la vérification des données, activer la vérification des données et tester s'il prend en charge la vérification des données;
Étape 4: Testez si l'annotation de la valeur prend en charge les expressions SPEL;
import org.springframework.beans.factory.annotation.value; import org.springframework.sterreotype. Classe * Étape 1: Ajouter des paramètres d'injection de valeur d'annotation sur les attributs * Étape 2: Ajoutez la classe modifiée par l'annotation de valeur au conteneur Spring IOC; * Étape 3: Ajoutez l'annotation de vérification des données pour vérifier si la vérification des données est prise en charge; * * Points de note: * 1. Surnom et créé dans le fichier de configuration YML, les paramètres correspondants sont des maillages et des soulignements, respectivement, utilisés pour tester leur relâchement des noms d'attribut correspondants * 2. Les tests e-mail et iPhone prennent en charge JSR303 Vérification des données * 3. Les tests de capacités qui prennent en charge les structures de données complexes * * Conclusion: * 1. La valeur de création doit être cohérente avec les paramètres de la configuration. * 2. Puisqu'il s'agit d'ajouter des annotations de vérification des boîtes aux lettres sur l'iPhone, vous pouvez toujours passer le test. * 3. La structure de données complexe n'est pas prise en charge, et l'erreur invite est la même que la première: illégalargumentException: n'a pas pu résoudre l'espace réservé 'itdragon.abilities' en valeur "$ {itdragon.Aitiabilities}" * / @ composant @ validedPublic class plassEntity {@Value ("$ {itDragon.Nick-Name}") private nickname; @Value ("$ {itdragon.email}") Email de chaîne privés; @Email @Value ("$ {itdragon.iphone}") // L'analyse est réussie et la vérification des données n'est pas prise en charge de la chaîne privée iPhone; // @value ("$ {itdragon.atredDate}") // La partsing est une erreur, la structure de données complexe ne prend pas en charge la liste privée <string> ")") ")") " // Analyse des erreurs, ne prend pas en charge les propriétés de correspondance lâche et doit être strictement cohérente à la date privée créée; // le côté puissant de l'annotation de la valeur: prend en charge l'expression de Spel @Value ("# {(1 + 2-3) / 4 * 5}") // Opérateur de chaîne privée de l'opération arithmétique; @Value ("# {1> 2 || 2 <= 3}") // Opération relationnelle Comparaison booléenne privée; @Value ("# {SystemProperties ['java.version']}") // Configuration du système: OS.Name Private String SystemProperties; @Value ("# {t (java.lang.math) .abs (-18)}") // Expression private String mapExpression; // omettre Getter, setter, méthodes de tostring}4) Résumé de la valeur du fichier de configuration
1. ConfigurationProperties Les annotations prennent en charge l'injection par lots, tandis que les annotations de valeur conviennent à l'injection unique;
2. ConfigurationProperties Annotations Prise en charge la vérification des données, tandis que les annotations de valeur ne le font pas;
3.
4. ConfigurationProperties ne prend pas en charge les expressions de Spel puissantes, mais la valeur les prend en charge;
4. Placers du fichier de configuration
Les espaces réservés et les nombres aléatoires sont relativement simples, donc je publierai le code ici directement. Ce qui doit être noté est:
1. La valeur de l'espace réservé doit être le chemin complet
2. Définissez la valeur par défaut de l'espace réservé, il ne doit pas y avoir d'espace après le côlon
Ran: # Le préfixe ici ne peut pas être aléatoire, ran-valeur: $ {random.value} ran-int: $ {random.int} ran-long: $ {random.long} ran-int-num: $ {random.int (10)} ran-int-gang Ici, et la clé est le chemin complet} import org.springframework.boot.context.properties.configurationproperties; import org.springframework.sterreo-uponent; / ** * Numéro aléatoire et classe de syntaxe de placement * / @ component @ configurationProperties (prefix = "ran") public class randomentity {private String ranvalue; // générer au hasard une chaîne entière privée ranint; // générer au hasard un long ranlong privé entier; // Générez au hasard un entier privé long long ranintnum; // Générer au hasard un entier privé dans une plage spécifiée entière RanIntrange; // générer de manière aléatoire une chaîne privée entière RanplaceHolder RanPlace; // Paceholder // Omit Getter, setter, ToString Method E} Code de test: @runwith (springrunner.class) @sspringbootterSpublic ClassbootyMlApplicationTests {@AuTowive userInfo; @Autowired Private Yamlentity Yamlentity; @Autowired Private ConfigurationPropertiseSentity ConfigurationPropertiseSentity; @Autowired Private Valuentity ValueNittity; @Autowired Private Randomentity Randomentity; @Test public void contextloads () {// system.out.println ("yaml grammar:" + yamlentity); // system.out.println ("userInfo:" + userInfo); // System.out.println ("ConfigurationProperties Grammar:" + ConfigurationPropertiseSentity); // System.out.Println ("Value Grammar:" + ValueEntity); System.out.println ("Grammaire aléatoire:" + Randomentity); }}5. Résumé
1. Spring Boot prend en charge les fichiers de configuration en deux formats, parmi lesquels la structure de données de YAML est plus claire que les propriétés.
2. YAML est une langue spécialement utilisée pour écrire des fichiers de configuration, qui est très concis et puissant.
3. YAML a des exigences strictes sur les espaces et ne peut pas être remplacée par la clé de l'onglet.
4. Yaml détermine le niveau par le degré d'indentation spatiale, avec des espaces suivant le côlon et les espaces suivant la courte ligne horizontale.
5. ConfigurationProperties Les annotations conviennent à l'injection par lots de propriétés dans les fichiers de configuration, et les annotations de valeur conviennent à l'obtention d'un élément dans le fichier de configuration.
6. ConfigurationProperties Annotations Prise en charge la somme de données de données pour obtenir des données complexes et les annotations de valeur prennent en charge les expressions SPEL.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.