Maison  >  Article  >  Java  >  Comment utiliser @ConfigurationProperties dans SpringBoot

Comment utiliser @ConfigurationProperties dans SpringBoot

王林
王林avant
2023-05-19 11:10:061367parcourir

Ajouter des dépendances

Nous devons d'abord ajouter des dépendances Spring Boot :

org.springframework.boot

Un exemple simple

@ConfigurationProperties doit être utilisé en conjonction avec @Configuration, nous le faisons habituellement dans une configuration POJO :

@Data@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { private String hostName; private int port; private String from;}

L'exemple ci-dessus lira tous les fichiers de propriétés commençant par les attributs de messagerie , et mis en correspondance avec les champs du bean :

#Simple Propertiesmail.hostname=host@mail.commail.port=9000mail.from=mailer@mail.com

La correspondance du nom d'attribut de Spring prend en charge de nombreux formats, comme suit Indique que tous les formats peuvent correspondre à hostName :

mail.hostNamemail.hostnamemail.host_namemail.host-namemail.HOST_NAME

Si vous ne souhaitez pas utiliser @Configuration, vous devez importer manuellement le fichier de configuration dans l'annotation @EnableConfigurationProperties comme suit :

@SpringBootApplication@EnableConfigurationProperties(ConfigProperties.class)public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args }}

Nous pouvons également spécifier le fichier de configuration dans @ConfigurationPropertiesScan Chemin :

@SpringBootApplication@ConfigurationPropertiesScan("com.flydean.config") public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args); dans ce cas, le programme recherchera uniquement les fichiers de configuration dans le package com.flydean.config.

Imbrication d'attributs

Nous pouvons imbriquer une classe, une liste, une carte. Prenons un exemple ci-dessous et créons d'abord un POJO commun :

@Datapublic class Credentials { private String authMethod ; private String username ;}

Créez ensuite un fichier de configuration imbriqué :

@Data@Configuration@ConfigurationProperties(prefix = "nestmail") public class NestConfigProperties { private String host; private String from; private List , String> ; defaultRecipients[0]=admin@mail.comnestmail.defaultRecipients[1]=owner@mail.com#Map Propertiesnestmail.additionalHeaders.redelivery=trueenestmail.additionalHeaders.secure=true#Object Propertiesnestmail.credentials.username=johnnestmail.credentials .password= passwordnestmail.credentials.authMethod=SHA1

@ConfigurationProperties et @Bean

@ConfigurationProperties peuvent également être utilisés avec @Bean comme suit :

@Datapublic class Item { private String name;} Découvrez comment à utiliser :

@Data@Configurationpublic class BeanConfigProperties { @Bean @ConfigurationProperties(prefix = "item") public Item item() { return new Item( }}

Vérification d'attribut

@ ConfigurationProperties peut utiliser le format standard JSR-303 pour la validation des propriétés. Prenons un exemple :

@Data@Validated@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { @NotEmpty private String hostName; = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}$") chaîne privée de;}Si notre Si la propriété ne remplit pas les conditions d'appel, l'exception suivante peut se produire :

Liaison à la cible org.springframework.boot.context.properties.bind.BindException : échec de la liaison des propriétés sous « mail » à com.flydean.config.ConfigProperties $$EnhancerBySpringCGLIB$ $f0f87cb9 a échoué : Propriété : mail.port Valeur : 0 Raison : La valeur minimale ne peut pas être inférieure à 1025 Propriété : mail.hostName Valeur : null Raison : Ne peut pas être vide Action : Mettez à jour la configuration de votre application. Processus terminé avec le code de sortie 1

Conversion de propriétés

@ConfigurationProperties prend également en charge plusieurs conversions de propriétés. Ci-dessous, nous prenons Duration et DataSize comme exemples :

Nous définissons deux champs de Durée : @ConfigurationProperties(prefix = "conversion") public class PropertyConversion { private Duration. timeInDefaultUnit; private Duration timeInNano ...}

Définissez ces deux champs dans le fichier de propriétés :

conversion.timeInDefaultUnit=10conversion.timeInNano=9ns

Nous voyons que les attributs ci-dessus peuvent avoir des unités. Les unités facultatives sont : ns, us, ms, s, m, h et d, correspondant respectivement aux nanosecondes, microsecondes, millisecondes, secondes, minutes, heures et jours. L'unité par défaut est la milliseconde. On peut également préciser l'unité dans l'annotation :

@DurationUnit(ChronoUnit.DAYS)private Duration timeInDays;

Le fichier de configuration correspondant est le suivant :

conversion.timeInDays=2

Voyons comment utiliser DataSize :

private DataSize sizeInDefaultUnit ; private DataSize sizeInGB ; @DataSizeUnit(DataUnit.TERABYTES)private DataSize sizeInTB ;

Fichier de propriétés correspondant :

Datasize prend en charge B, Ko, Mo, Go et To.

Convertisseur personnalisé

Le même Spring Boot prend également en charge les convertisseurs d'attributs personnalisés. Nous définissons d'abord une classe POJO :

public class Employee { private String name; private double salaire;}

Le fichier de propriétés correspondant :

conversion.employee=john,2000

Nous devons implémenter une classe de conversion du Converter interface nous - mêmes :

@Component@ConfigurationPropertiesBindingpublic class EmployeeConverter implémente Converter { @Override public Employee convert(String from) { String[] data = from.split(","); ], Double.parseDouble(data[1])); }}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer