编程知识 cdmana.com

L'apprentissage le plus détaillé de springboot sur le Web - day03

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!

  1. Les espaces ne peuvent pas être omis

  2. Contrôle des relations hiérarchiques par indentation,Chaque fois qu'une colonne de données alignée à gauche est au même niveau.

  3. 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

  1. InspringbootDans le projetresourcesCréer un nouveau fichier dans le Répertoire application.yaml

  2. É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;

}
  1. 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;
}
  1. 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? .

image-20210922214312661

  1. 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;
}
  1. 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
  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;
}
  1. 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”)1595464671197

    • InpomDépendance à l'importation

      <dependency>
          <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-configuration-processor</artifactId>    	  
              <optional>true</optional>
      </dependency>
      
  2. 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))
    

    image-20210922215454367

    Si tous les problèmes suivants sont nuls :

    image-20210922215124805

    C'est parce quePerson.javaCatégorie

    image-20210922215347166

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;
  1. On y va. resourcesCréer un nouveau sous le Répertoiresxau.propertiesDocumentation

    name=zhangmazi
    
  2. 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;
    }
    
  3. Encore un test de sortie : La liaison du profil spécifié a réussi !

    image-20210922215811913

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;

image-202109222202153101595468231075

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
  1. @ConfigurationProperties Il suffit de l'écrire une fois. , @Value Chaque champ doit être ajouté

  2. 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

  3. 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

  4. 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

Scroll to Top