Eine der Methoden, um den Wert der Einstellungsdatei in Spring Boot von der Anwendung zu verarbeiten.
application.yaml
sample:
hoge: hogeValue
huga: hugaValue
piyo: piyoValue
Wenn es einen Einstellwert wie z
package com.wakye.property
import ........
@ConstructorBinding
@ConfigurationProperties("sample")
data class SampleProperty(
val hoge: String,
val huga: String,
val piyo: String
)
Durch Hinzufügen der Annotation ConfigurationProperties zu der Klasse, deren Feld auf diese Weise dem Einstellungswert entspricht, wird der Wert gebunden und dann als Bean registriert.
Die ConstructorBinding-Annotation hat nichts mit der Hauptzeile zu tun. Wenn Sie jedoch eine SpringBoot-Anwendung mit kotlin entwickeln, wird sie verwendet, um die ConfigurationProperties-Annotation zur Datenklasse hinzuzufügen.
Das Problem ist nun, wenn Sie diese Bohne bekommen.
Normalerweise ist es kein Problem, die Funktion von Spring Boot als Konstruktor einzufügen.
Ich musste die registrierte Bean jedoch durch Angabe des Bean-Namens abrufen, aber es gab ein Problem. Mit der in ApplicationContext definierten Methode getBean ist es möglich, die registrierte Bean aus dem Bean-Namen abzurufen.
In Spring Boot ist der Bean-Name standardmäßig der Klassenname in Kleinbuchstaben. (Der Klassenname wird nur im Großbuchstaben definiert, daher wird der Kampf möglicherweise nur in Kleinbuchstaben geschrieben.)
Damit
applicationContext.getBean("sampleProperty")
Ich habe versucht, es so zu bekommen, aber es ist eine Ausnahme aufgetreten, und es scheint, dass die als sampleProperty definierte Bean nicht existiert.
Ein paar Stunden bis Google. .. .. .. .. .. ..
Diese Beschreibungen finden Sie in der Dokumentation! !! !!
Wenn die @ ConfigurationProperties-Bean auf diese Weise registriert wird, hat die Bean den traditionellen Namen \ <Präfix> - \
. <Präfix> ist das Umgebungsschlüsselpräfix, das in der Annotation @ConfigurationProperties angegeben ist, und ist der vollständig qualifizierte Name der Bean. Wenn die Annotation kein Präfix enthält, wird nur der vollständig qualifizierte Name der Bean verwendet.
[Offizielles Dokumentzitat](https://spring.pleiades.io/spring-boot/docs/2.1.3.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-config- typsichere Konfigurationseigenschaften)
Anscheinend registriert es sich nicht mit einem normalen Bohnennamen.
In diesem Fall
Präfix ist sample
fqn ist com.wakye.property
Der Name der Bohne lautet also
sample-com.wakye.property.SampleProperty
Es scheint so als.
applicationContext.getBean("sample-com.wakye.property.SampleProperty")
Erfolgreiche Akquisition hier.
Es war eine Falle, die schwer zu verstehen war.
Recommended Posts