Heim >Java >javaLernprogramm >So verwenden Sie @ConfigurationProperties in SpringBoot

So verwenden Sie @ConfigurationProperties in SpringBoot

王林
王林nach vorne
2023-05-19 11:10:061445Durchsuche

Abhängigkeiten hinzufügen

Zuerst müssen wir Spring Boot-Abhängigkeiten hinzufügen:

org.springframework.boot spring-boot-starter-parent

Ein einfaches Beispiel

@ConfigurationProperties muss in Verbindung mit @Configuration verwendet werden, wir machen es normalerweise in a POJO-Konfiguration:

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

Das obige Beispiel liest alle Eigenschaftendateien, die mit mail Properties beginnen und gleichen Sie sie mit Feldern in der Bean ab:

#Einfache Eigenschaftenmail.hostname=host@mail.commail.port=9000mail.from=mailer@mail.com

Der Attributnamensabgleich von Spring unterstützt viele Formate, wie folgt. Zeigt alle Formate an kann mit hostName abgeglichen werden:

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

Wenn Sie @Configuration nicht verwenden möchten, müssen Sie die Konfigurationsdatei wie folgt manuell in die Annotation @EnableConfigurationProperties importieren:

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

Wir können die Konfigurationsdatei auch in @ angeben ConfigurationPropertiesScan Path:

@SpringBootApplication@ConfigurationPropertiesScan("com.flydean.config") public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args); }}

In diesem In diesem Fall sucht das Programm nur nach Konfigurationsdateien im Paket com.flydean.config.

Attributverschachtelung

Wir können unten ein Beispiel nehmen und ein gemeinsames POJO erstellen:

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

Dann erstellen Sie eine verschachtelte Konfigurationsdatei:

@Data@Configuration@ConfigurationProperties(prefix = „nestmail“) public class NestConfigProperties { private int port; private String from; private Map previousHeaders; private Credentials credentials;}

Die entsprechende Eigenschaftendatei lautet wie folgt:

# Nest Simple Propertiesnestmail.hostname=mailer@mail.comnestmail.port=9000nestmail.from=mailer@mail.com# List Propertiesnestmail. 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= passwortnestmail.credentials.authMethod=SHA1

@ConfigurationProperties und @Bean

@ConfigurationProperties können auch mit @Bean wie folgt verwendet werden:

@Datapublic class Item { private String name; private int size;}

Sehen Sie, wie Zu verwenden:

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

Attributüberprüfung

@ ConfigurationProperties kann das verwenden Standard-JSR-303-Format für die Eigenschaftsvalidierung. Nehmen wir ein Beispiel:

@Data@Validated@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { @NotEmpty private String hostName; @Min(1025) @Max(65536) private int port; @Pattern(regexp = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}$") privater String von;}

If unser If Wenn die Eigenschaft die Einspruchsbedingungen nicht erfüllt, kann die folgende Ausnahme auftreten:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind Properties under „mail“ to com.flydean.config.ConfigProperties $$EnhancerBySpringCGLIB$ $f0f87cb9 fehlgeschlagen: Eigenschaft: mail.port Wert: 0 Grund: Der Mindestwert darf nicht kleiner als 1025 sein. Eigenschaft: mail.hostName Wert: null Grund: Darf nicht leer sein. Aktion: Aktualisieren Sie die Konfiguration Ihrer Anwendung. Der Prozess wurde mit Exit-Code 1 abgeschlossen

Eigenschaftskonvertierung

@ConfigurationProperties unterstützt auch mehrere Eigenschaftskonvertierungen. Nachfolgend nehmen wir Duration und DataSize als Beispiele:

Wir definieren zwei Duration-Felder:

@ConfigurationProperties(prefix = „conversion“) public class PropertyConversion { private Duration timeInDefaultUnit; private Duration timeInNano ; ...}

Definieren Sie diese beiden Felder in der Eigenschaftendatei:

conversion.timeInDefaultUnit=10conversion.timeInNano=9ns

Wir sehen, dass die oben genannten Attribute Einheiten haben können. Optionale Einheiten sind: ns, us, ms, s, m, h und d, entsprechend Nanosekunden, Mikrosekunden, Millisekunden, Sekunden, Minuten, Stunden und Tagen. Die Standardeinheit ist Millisekunden. Wir können die Einheit auch in der Anmerkung angeben:

@DurationUnit(ChronoUnit.DAYS)private Duration timeInDays;

Die entsprechende Konfigurationsdatei lautet wie folgt:

conversion.timeInDays=2

Werfen wir einen Blick auf die Verwendung DataSize:

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

Entsprechende Eigenschaftsdatei:

conversion.sizeInDefaultUnit=300conversion.sizeInTB=4

Datasize unterstützt B, KB, MB, GB und TB.

Benutzerdefinierter Konverter

Derselbe Spring Boot unterstützt auch benutzerdefinierte Attributkonverter. Wir definieren zunächst eine POJO-Klasse:

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

Die entsprechende Eigenschaftsdatei:

conversion.employee=john,2000

Wir müssen eine Konvertierungsklasse des Konverters implementieren Schnittstelle selbst:

@Component@ConfigurationPropertiesBindingpublic class EmployeeConverter implementiert Converter { @Override public Employee convert(String from) { String[] data = from.split(","); return new Employee(data[0 ], Double.parseDouble(data[1]));

Das obige ist der detaillierte Inhalt vonSo verwenden Sie @ConfigurationProperties in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen