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
368 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 :

<code class="language-java">@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;
}</code>
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 :

<code class="language-java">@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    Map<String, String> headers
) {}</code>
Copier après la connexion

Solution Spring 3.x deux :

<code class="language-java">@Configuration
@ConfigurationProperties("mail.headers")
public record MailHeadersProperties(
    String xFrom,
    String xCustom
) {}

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

Solution 1 de Spring 2.x :

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

Vos attributs d'utilisation du service sont les suivants :

<code class="language-java">@Service
@RequiredArgsConstructor
public class CustomService {
    private final MailProperties mailProperties;
}</code>
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!

source:php.cn
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