yamlApprentissage de la grammaire
À propos de l'auteur
- Présentation de l'auteur
Page d'accueil du blog:Page d'accueil de l'auteur
Introduction:JAVADomaine créateur de haute qualité、Un étudiant de troisième année、Participer à diverses compétitions provinciales pendant l'école、National race,Une série d'honneurs.
Concentre - toi sur moi.:Suivez mon matériel d'apprentissage、Tous les téléchargements de documents sont disponibles,Mise à jour quotidienne des articles,Inspirez - vous en tant queJAVASenior Program singe.
Profil
SpringBootUtiliser un profil global , Le nom du profil est fixe
-
application.properties
-
- Structure grammaticale :key=value
-
application.yaml
-
- Structure grammaticale :key:Espaces value
**Le rôle du profil :**ModifierSpringBootPar défaut pour la configuration automatique,Parce queSpringBootNous avons été automatiquement configurés au rez - de - chaussée;
Par exemple, nous pouvons modifier le fichier de configurationTomcat Numéro de port de démarrage par défaut!Testez!
server:
port: 8081
YAML
yamlGénéralités
-
YAML- Oui. “YAML Ain’t a Markup Language” (YAMLPas un langage de balisage)Abréviation récursive de.Dans le développement de cette langue,,YAML En fait, ça veut dire:“Yet Another Markup Language”(Reste un langage de balisage)
-
Cette langue Données En tant que centre ,Plutôt que de se concentrer sur le langage de balisage!
-
Profil précédent,La plupart sont utilisésxmlPour configurer;Comme une configuration de port simple,Comparons ça.yamlEtxml
-
La traditionxmlConfiguration:
<server> <port>8081<port> </server>
-
yamlConfiguration:
server: prot: 8080
-
yamlSyntaxe de base
Description:Grammaire stricte!
-
Les espaces ne peuvent pas être omis
-
Contrôle des relations hiérarchiques par indentation,Chaque fois qu'une colonne de données alignée à gauche est au même niveau.
-
Les attributs et les valeurs sont sensibles à la casse.
Quantité littérale:Valeur normale [ Nombre,Booléen,String ]
-
La quantité littérale est écrite directement derrière , La chaîne par défaut n'a pas besoin de guillemets doubles ou simples;
k: v
Attention!:
-
“ ” Guillemets doubles,Ne pas échapper aux caractères spéciaux dans la chaîne , Des caractères spéciaux peuvent être utilisés comme des significations qu'ils veulent exprimer;
Par exemple, :name: “kuang \n shen” Produits :kuang Nouvelle ligne shen
-
‘’ Guillemets simples,Les caractères spéciaux s'échappent , Les caractères spéciaux finissent par sortir comme des caractères normaux
Par exemple, :name: ‘kuang \n shen’ Produits :kuang \n shen
-
Objet、Map(Paire de clés)
#Objet、MapFormat
k:
v1:
v2:
Écrivez les propriétés et les relations de valeur de l'objet sur la ligne suivante,Attention à l'indentation;Par exemple,:
student:
name: qinjiang
age: 3
écriture en ligne
student: {
name: qinjiang,age: 3}
Tableau( List、set )
Avec - La valeur représente un élément du tableau,Par exemple,:
pets:
- cat
- dog
- pig
écriture en ligne
pets: [cat,dog,pig]
ModifierSpringBootNuméro de port par défaut pour
Ajouter au profil,Paramètres du numéro de port,Vous pouvez changer de port;
server:
port: 8082
Profil d'injection
- yamlCe qui rend les documents plus puissants, c'est que,Il peut injecter des valeurs correspondantes directement dans nos classes d'entités!
yamlProfil d'injection
-
InspringbootDans le projetresourcesCréer un nouveau fichier dans le Répertoire application.yaml
-
Écrire une classe d'entité Dog;
package com.sxau.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
@Data//set、getMéthodes
@AllArgsConstructor//lombok Annotation de la structure paramétrique
@NoArgsConstructor//lombok Annotation construction sans paramètres
@Component//Inscriptionbean
@Validated
public class Dog {
@Value("Wangcai.")
private String lastName;
@Value("3")
private Integer age;
}
- Penser, Comment avons - nous donné beanInjecter la valeur de l'attribut!@Value, Testez les chiens. :
@Component //Inscriptionbean
public class Dog {
@Value("Wangcai.")
private String lastName;
@Value("3")
private Integer age;
}
- InSpringBoot Dans la catégorie test, injectez le chien et sortez - le. ;
package com.sxau;
import com.sxau.pojo.Dog;
import com.sxau.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot02ConfigApplicationTests {
@Autowired// Doit être assemblé
Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
Résultats obtenus avec succès,@ValueInjection réussie, C'est comme ça qu'on a fait, non? .
- Nous écrivons une classe d'entité un peu plus complexe :Person Catégorie
package com.sxau.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data//set、getMéthodes
@AllArgsConstructor//lombok Annotation de la structure paramétrique
@NoArgsConstructor//lombok Annotation construction sans paramètres
@Component
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
- On va utiliseryamlInjection configurée, Faites attention aux différences et aux avantages lorsque vous écrivez ,Nous avons écrit unyamlConfiguration!
person:
name: qinjiang
age: 3
happy: false
birth: 2000/01/01
maps: {
k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: Wangcai.
age: 1
- Nous venons de mettre person Toutes les valeurs de cet objet sont écrites , Nous allons maintenant injecter dans notre classe !
package com.sxau.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
/* @ConfigurationPropertiesAction: La valeur de chaque propriété à configurer dans le fichier de configuration,Mapping to this Component; Dis - le.SpringBootLier toutes les propriétés de cette classe à la configuration associée dans le fichier de configuration Paramètres prefix = “person” : Dans le fichier de configurationpersonTous les attributs suivants correspondent un par un */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
-
IDEA Conseils,springboot Le processeur d'annotation de configuration n'a pas été trouvé , Regardons la documentation , Nous pouvons voir les documents , Trouver une dépendance !
-
[email protected](prefix = “person”)
-
InpomDépendance à l'importation
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
-
-
Confirmer toutes les configurations ci - dessus OKAprès, Allons le tester dans la classe de test. :
@SpringBootTest class Springboot02ConfigApplicationTests { @Autowired private Person person; @Test void contextLoads() { System.out.println(person); } }
Résultats: Toutes les valeurs injectées avec succès !
Person(name=qinjiang09573531-6959-4dab-9f2e-85d02f1e18b8, age=1645918254, happy=false, birth=Sat Jan 01 00:00:00 CST 2000, maps={ k1=v1, k2=v2}, lists=[code, girl, music], dog=Dog(lastName=null, age=1))
Si tous les problèmes suivants sont nuls :
C'est parce quePerson.javaCatégorie
yaml Configuration injectée dans la classe entity Full OK!
Charger le profil spécifié
- **@PropertySource :**Charger le profil spécifié;
- @configurationProperties:Obtient les valeurs par défaut à partir du profil global;
-
On y va. resourcesCréer un nouveau sous le Répertoiresxau.propertiesDocumentation
name=zhangmazi
-
Ensuite, spécifiez le chargement dans notre code sxau.propertiesDocumentation
package com.sxau.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; @Data @AllArgsConstructor @NoArgsConstructor @Component // Charger le profil spécifié @PropertySource(value = "classpath:sxau.properties") public class Person { @Value("${name}") private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
-
Encore un test de sortie : La liaison du profil spécifié a réussi !
Substituant de profil
Le profil peut également écrire des substituants pour générer des nombres aléatoires
person:
name: qinjiang${
random.uuid}
age: ${
random.int}
happy: false
birth: 2021/09/22
maps: {
k1: v1,k2: v2 }
hello: happy
lists:
- code
- girl
- music
dog:
name: ${
person.hello:hello}___Wangcai.
age: 3
RétrospectivepropertiesConfiguration
- Ce que nous avons utilisé ci - dessus yaml Les méthodes sont les plus simples ,Le plus souvent utilisé dans le développement;
- C'est aussispringboot Recommandé !
- Alors, parlons d'autres façons de le faire. , C'est la même chose. ; Écris ou écris comme ça. ; Fichiers de configuration autres que yml Et ce que nous avions l'habitude de faire properties , Nous n 'aurons pas adjugé , On va bavarder. !
【Attention!】properties
Profil en chinois ,Oui.- Non. , On doit y aller.IDEA Définir le format d'encodage comme UTF-8;settings–>Editor–>File Encodings Configuration moyenne;
Résumé comparatif
@Value Ce n'est pas convivial. ! Nous devons assigner des valeurs aux annotations individuelles pour chaque attribut ,C'est plus compliqué.; Voyons une comparaison fonctionnelle.
@ConfigurationProperties | @Value | |
---|---|---|
Fonction | Propriétés dans le Profil d'injection en vrac | Un par un |
Liaison lâche | Soutien | Non pris en charge |
SpEL | Non pris en charge | Soutien |
JSR303Vérification des données | Soutien | Non pris en charge |
Encapsulation de type complexe | Soutien | Non pris en charge |
-
@ConfigurationProperties
Il suffit de l'écrire une fois. , @Value Chaque champ doit être ajouté -
Liaison lâche: Qu'est - ce que ça veut dire? ? Comme monymlÉcrit enlast-name,Ceci etlastNameC'est pareil, - Les lettres suivantes sont majuscules par défaut . C'est une liaison lâche. .On peut tester
-
JSR303Vérification des données , C'est que nous pouvons ajouter une couche de validation de filtre dans le champ , Peut garantir la légitimité des données
-
Encapsulation de type complexe,yml Peut encapsuler des objets , UtiliservaluePas de soutien.
Conclusions:
ConfigurationymlEt configurationproperties Vous pouvez obtenir des valeurs , Fortement recommandé yml;
Si nous sommes dans une entreprise , Il suffit d'obtenir une valeur dans le fichier de configuration , Je peux l'utiliser. @value;
Si c'est le cas,,Nous avons spécialement écrit unJavaBean Pour cartographier un par un avec le profil ,Tout droit**@configurationProperties**,N'hésitez pas!
版权声明
本文为[Directeur d'usine Java]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/10/20211013211944105r.html