Heim >Java >javaLernprogramm >So verwenden Sie @ConfigurationProperties in SpringBoot
Abhängigkeiten hinzufügen
Zuerst müssen wir Spring Boot-Abhängigkeiten hinzufügen:
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
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
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!