Ich möchte auf Werte zugreifen, die in bereitgestellt werden application.properties
, z.
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
Ich möchte userBucket.path
in meinem Hauptprogramm in einer Spring Boot-Anwendung zugreifen .
java
spring-boot
properties-file
Qasim
quelle
quelle
Environment
oder via@ConfigurationProperties
@Configuration
Klassen, das Problem wird im folgenden Blog-Beitrag@Component
(oder einem seiner Derivate, dh@Repository
usw.)Ein anderer Weg ist das Injizieren
org.springframework.core.env.Environment
in Ihre Bohne.quelle
org.springframework.core.env.Environment
@ConfigurationProperties
kann verwendet werden, um Werte von.properties
(.yml
auch unterstützt) einem POJO zuzuordnen .Betrachten Sie die folgende Beispieldatei.
.Eigenschaften
Employee.java
Jetzt kann auf den Eigenschaftswert
employeeProperties
wie folgt automatisch zugegriffen werden .quelle
src/main/resources
wenn Sie Ihren Code nicht aus einem Spring-Test testen.Derzeit kenne ich die folgenden drei Möglichkeiten:
1. Die
@Value
Anmerkungnull
. Zum Beispiel, wenn Sie versuchen, es in einerpreConstruct()
Methode oder einerinit()
Methode festzulegen. Dies geschieht, weil die Wertinjektion erfolgt, nachdem die Klasse vollständig erstellt wurde. Aus diesem Grund ist es besser, die 3. Option zu verwenden.2. Die
@PropertySource
AnmerkungPropertySouce
Legt Werte aus der Eigenschaftsquelldatei in einerEnvironment
Variablen (in Ihrer Klasse) fest, wenn die Klasse geladen wird. So können Sie leicht Nachworte abrufen.3. Die
@ConfigurationProperties
Anmerkung.Es initialisiert eine Entität basierend auf Eigenschaftsdaten.
@ConfigurationProperties
Identifiziert die zu ladende Eigenschaftendatei.@Configuration
Erstellt eine Bean basierend auf Variablen der Konfigurationsdatei.quelle
spring.config.location
? Funktioniert # 2 noch?Sie können es auch so machen ...
Übergeben Sie dann, wo immer Sie aus application.properties lesen möchten, einfach den Schlüssel an die Methode getConfigValue.
quelle
Environment
?spring.config.location
?Sie können das verwenden
@Value
, um Variablen aus dem zu laden,application.properties
wenn Sie diesen Wert an einer Stelle verwenden. Wenn Sie jedoch eine zentralere Methode zum Laden dieser Variablen benötigen,@ConfigurationProperties
ist dies ein besserer Ansatz.Darüber hinaus können Sie Variablen laden und automatisch umwandeln, wenn Sie unterschiedliche Datentypen benötigen, um Ihre Validierungen und Geschäftslogik durchzuführen.
quelle
folge diesen Schritten. 1: - Erstellen Sie Ihre Konfigurationsklasse wie unten gezeigt
2: - Wenn Sie eine Konfigurationsklasse haben, fügen Sie die Variable aus einer Konfiguration ein, die Sie benötigen.
quelle
quelle
Eine Anwendung kann drei Werttypen aus der Datei application.properties lesen.
application.properties
Klassendatei
Wenn Sie in application.properties keine Eigenschaft haben, können Sie den Standardwert verwenden
quelle
Mit Spring-Boot können wir auf verschiedene Weise externe Konfigurationen bereitstellen. Sie können versuchen, anstelle der Eigenschaftendatei application.yml- oder yaml-Dateien zu verwenden und je nach Umgebung unterschiedliche Eigenschaftendateien einzurichten.
Wir können die Eigenschaften für jede Umgebung in separate yml-Dateien unter separaten Federprofilen aufteilen. Während der Bereitstellung können Sie Folgendes verwenden:
Geben Sie an, dass die yml-Dateien den Namen haben sollen
damit sie automatisch von springboot aufgenommen werden.
Referenz: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
So lesen Sie aus der Datei application.yml oder der Eigenschaft:
Der einfachste Weg , einen Wert aus der Eigenschaftendatei oder der yml zu lesen, ist die Verwendung der Annotation spring @value. Spring lädt automatisch alle Werte aus der yml in die spring-Umgebung, sodass wir diese Werte direkt aus der Umgebung verwenden können, wie:
Oder eine andere Methode, die der Frühling zum Lesen stark typisierter Bohnen bietet, ist folgende:
Entsprechender POJO zum Lesen des yml:
Die obige Methode funktioniert gut mit yml-Dateien.
Referenz: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
quelle
Für mich hat keines der oben genannten Dinge direkt für mich funktioniert. Was ich getan habe, ist Folgendes:
Zusätzlich zu @Rodrigo Villalba Zayas Antwort dort oben habe ich
implements InitializingBean
die Klasse hinzugefügtund die Methode implementiert
Das wird also so aussehen
quelle
Die besten Methoden zum Abrufen von Eigenschaftswerten sind.
1. Verwenden der Wertanmerkung
2. Verwenden von Enviornment Bean
quelle
Am besten verwenden Sie eine
@Value
Anmerkung, die Ihrem Objekt automatisch einen Wert zuweistprivate Environment en
. Dies reduziert Ihren Code und es ist einfach, Ihre Dateien zu filtern.quelle
Es gibt zwei Wege,
@Value
in Ihrer Klasse verwendenODER
@Configuration
Klasse reinigen , in der Sie alle Ihre hinzufügen können@value
quelle