Maison > Java > javaDidacticiel > Lire la configuration comme un pro sur Spring

Lire la configuration comme un pro sur Spring

Mary-Kate Olsen
Libérer: 2025-01-23 12:05:13
original
447 Les gens l'ont consulté

Reading configuration like a pro on Spring

Présentation

Comme nous le savons tous, Spring propose plusieurs façons d'atteindre le même objectif, dont l'une consiste à récupérer les valeurs enregistrées dans le fichier de configuration.

Si vous êtes nouveau sur Spring, vous rencontrerez peut-être du code qui utilise l'annotation @Value pour récupérer les valeurs d'un fichier application.properties ou application.yml. Si vous utilisez cette approche, sachez qu'il n'y a rien de mal à cela, mais vous risquez d'introduire une complexité inutile dans votre application.

@ValueQuestion

Le principal problème lié à l'utilisation de @Value est lorsqu'il s'agit de variables contenant d'autres valeurs. Est-ce que cela a du sens ? pas compris ? Regardons un exemple :

Supposons que vous disposez du fichier de configuration suivant :

<code>mail.user=dev@locahost
mail.password=123
mail.headers.x-from=Ekerdev
mail.headers.x-custom=custom</code>
Copier après la connexion

Vous devez procéder comme ceci :

@Service
public class CustomService {
    @Value("${mail.user}")
    private String user;

    @Value("${mail.password}")
    private String password;

    @Value("${mail.headers.x-from}")
    private String xFrom;

    @Value("${mail.headers.x-custom}")
    private String xCustom;
}
Copier après la connexion

Jusqu'à présent, aucun problème. Mais imaginez maintenant que votre application doive utiliser ces mêmes variables à plusieurs endroits de votre code. Pensez à la quantité de code en double que nous obtiendrons, n'est-ce pas ?

Solution

La meilleure solution est donc d'utiliser l'annotation @ConfigurationProperties. Cela permet à notre application d'injecter plus facilement des variables dans les classes et nous pouvons l'utiliser comme n'importe quelle autre dépendance dans Spring, comme le montre l'exemple ci-dessous :

Solution 1 de Spring 3.x :

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    Map<String, String> headers
) {}
Copier après la connexion

Solution Spring 3.x deux :

@Configuration
@ConfigurationProperties("mail.headers")
public record MailHeadersProperties(
    String xFrom,
    String xCustom
) {}

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    MailHeadersProperties headers
) {}
Copier après la connexion

Solution 1 de Spring 2.x :

@Data
@AllArgsConstructor
@ConfigurationPropertiesScan
@ConfigurationProperties("mail")
public class MailProperties {
    private String user;
    private String password;
    private Map<String, String> headers;
}
Copier après la connexion
@SpringBootApplication
@ConfigurationPropertiesScan("your.package.mailproperties") //your.package.mailproperties  替换成你的包路径
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}
Copier après la connexion

Vos attributs d'utilisation du service sont les suivants :

@Service
@RequiredArgsConstructor
public class CustomService {
    private final MailProperties mailProperties;
}
Copier après la connexion

Avantages

Le principal avantage de l'utilisation de @ConfigurationProperties est que nous n'avons pas besoin de chercher l'annotation @Value dans le code, ce qui rend le code plus facile à lire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal