Configuration Yaml et sa syntaxe de base

Fichier de configuration SpringBoot

SpringBoot utilise un fichier de configuration global, le nom du fichier de configuration est fixe

application.properties

Structure grammaticale: clé = valeur

application.yml

Structure de la syntaxe: clé: valeur d'espace

Le rôle du fichier de configuration: modifier la valeur par défaut de la configuration automatique de SpringBoot, car SpringBoot nous configure automatiquement en bas;

Par exemple, nous pouvons modifier le numéro de port par défaut de Tomcat dans le fichier de configuration! faites un test!

server.port=8081

Yaml

Ce langage est centré sur les données, pas des langages de balisage!

La plupart des fichiers de configuration précédents sont configurés à l'aide de xml; par exemple, une configuration de port simple, comparons yaml et xml

Configuration xml traditionnelle:

<server>
    <port>8081<port>
</server>

configuration yaml:

server:
  prot: 8080

grammaire de base yaml

1. Les espaces ne peuvent pas être omis
2. L'indentation est utilisée pour contrôler la relation hiérarchique, tant que la colonne de données alignée à gauche est au même niveau.
3. Le cas des attributs et des valeurs est très sensible.

Littéral: valeur ordinaire [nombre, booléen, chaîne]

Le littéral peut être écrit directement derrière, et la chaîne n'a pas besoin d'être placée entre guillemets ou guillemets simples par défaut;

k: v

Remarque:

"" Les guillemets doubles n'échapperont pas aux caractères spéciaux de la chaîne et les caractères spéciaux seront ce qu'ils veulent exprimer;

Par exemple: nom: "kuang \ n shen" Sortie: kuan, saut de ligne shen

'' Les guillemets simples échapperont aux caractères spéciaux et les caractères spéciaux finiront par devenir affichés comme des caractères ordinaires

Par exemple: nom: 'kuang \ n shen' sortie: kuang \ n shen

Objet, carte (paire clé-valeur)

#对象、Map格式
k: 
    v1:
    v2:

Écrivez les propriétés et les relations de valeur de l'objet sur la ligne suivante, en faisant attention à l'indentation; par exemple:

student:
    name: qinjiang
    age: 3

Écriture en ligne

student: {
    
    name: qinjiang,age: 3}

Array (liste, ensemble)

Utilisez-value pour représenter un élément du tableau, par exemple:

pets:
 - cat
 - dog
 - pig

Écriture en ligne

pets: [cat,dog,pig]

Modifier le numéro de port par défaut de SpringBoot

Ajoutez le paramètre du numéro de port dans le fichier de configuration, vous pouvez changer de port;

server:
  port: 8082

fichier de configuration d'injection yaml

Ecrire une classe d'entité Dog;

package com.kuang.springboot.pojo;

@Component  //注册bean到容器中
public class Dog {
    
    
    private String name;
    private Integer age;

    
    //有参无参构造、get、set方法、toString()方法  
}

Comment avons-nous injecté des valeurs de propriété dans le bean! @Value, testez-le pour la catégorie chien:

@Component //注册bean
public class Dog {
    
    
    @Value("阿黄")
    private String name;
    @Value("18")
    private Integer age;
}

Injectez la sortie doggo sous la classe de test SpringBoot;

@SpringBootTest
class DemoApplicationTests {
    
    

    @Autowired //将狗狗自动注入进来
    Dog dog;

    @Test
    public void contextLoads() {
    
    
        System.out.println(dog); //打印看下狗狗对象
    }

}

Le résultat est sorti avec succès, l'injection @Value est réussie

Nous écrivons une classe d'entité plus complexe: la classe Person

@Component //注册bean到容器中
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;
    
    //有参无参构造、get、set方法、toString()方法  
}

Utilisons la méthode de configuration yaml pour l'injection. Lorsque vous écrivez, faites attention aux différences et aux avantages. Écrivons une configuration yaml!

person:
  name: qinjiang
  age: 3
  happy: false
  birth: 2000/01/01
  maps: {
    
    k1: v1,k2: v2}
  lists:
   - code
   - girl
   - music
  dog:
    name: 旺财
    age: 1

Nous venons d'écrire toutes les valeurs de l'objet person, injectons-le maintenant dans notre classe!

/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@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 invite, le processeur d'annotation de configuration de springboot n'est pas trouvé, regardons le document, nous pouvons regarder le document et trouver une dépendance!

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

Après avoir confirmé que la configuration ci-dessus est correcte, testons-la dans la classe de test:

@SpringBootTest
class DemoApplicationTests {
    
    

    @Autowired
    Person person; //将person自动注入进来

    @Test
    public void contextLoads() {
    
    
        System.out.println(person); //打印person信息
    }

}

Résultat: toutes les valeurs sont injectées avec succès!

Chargez le fichier de configuration spécifié

@PropertySource: charge le fichier de configuration spécifié;

@configurationProperties: récupère la valeur du fichier de configuration globale par défaut;

1. Créons un nouveau fichier person.properties dans le répertoire des ressources

name=kuangshen

2. Spécifiez ensuite le fichier person.properties à charger dans notre code

@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
    
    

    @Value("${name}")
    private String name;

    ......  
}

3. Relancez le test: le fichier de configuration spécifié est lié avec succès!

Espace réservé du fichier de configuration

Le fichier de configuration peut également écrire des espaces réservés pour générer des nombres aléatoires

person:
    name: qinjiang${
    
    random.uuid} # 随机uuid
    age: ${
    
    random.int}  # 随机int
    happy: false
    birth: 2000/01/01
    maps: {
    
    k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: ${
    
    person.hello:other}_旺财
      age: 1

problème de propriétés brouillées

Configurez dans les paramètres -> FileEncodings;
Insérez la description de l'image ici

Résumé de la comparaison

Insérez la description de l'image ici
1. @ConfigurationProperties ne doit être écrit qu'une seule fois, @Value doit être ajouté pour chaque champ

2. Reliure lâche: qu'est-ce que cela signifie? Par exemple, le nom de famille écrit dans mon yml, c'est le même que lastName, -les lettres qui suivent sont en majuscules par défaut. C'est une liaison lâche. Peut le tester

3. Vérification des données JSR303, c'est que nous pouvons ajouter une couche de vérification de filtre sur le terrain pour garantir la légalité des données

4. Encapsulation de types complexes. Les objets peuvent être encapsulés en yml, mais la valeur n'est pas prise en charge

en conclusion:

La configuration yml et les propriétés de configuration peuvent obtenir la valeur, yml est fortement recommandé;

Si nous sommes dans une entreprise et que nous n'avons besoin que d'obtenir une certaine valeur dans le fichier de configuration, nous pouvons utiliser @value;

Si nous disons que nous avons spécialement écrit un JavaBean pour mapper un à un avec le fichier de configuration, juste directement @configurationProperties, n'hésitez pas!

Je suppose que tu aimes

Origine blog.csdn.net/david2000999/article/details/114480081
conseillé
Classement