[JAVA] [Spring Boot] Die Geschichte, dass die Bean der Klasse mit der Annotation ConfigurationProperties nicht gefunden wurde

Was sind Konfigurationseigenschaften?

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.

Ich kenne den Bohnennamen nicht

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.

Versuche es herauszufinden

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

[Spring Boot] Die Geschichte, dass die Bean der Klasse mit der Annotation ConfigurationProperties nicht gefunden wurde
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Die Geschichte der Begegnung mit Spring Custom Annotation
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Einführung der Bibliothek ff4j, die Feature Toggle mit Spring Boot realisiert
[Gradle] Die Geschichte, dass die Klassendatei nicht in der JAR-Datei vorhanden war
Eine Geschichte, die mich bedauerte, als während der Entwicklung der Spring Boot-App eine "NotReadablePropertyException" auftrat.
Eine Geschichte, die mit der Einführung von Web Apple Pay zu kämpfen hatte
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
Die Geschichte, dass die Verarbeitungsleistung von ARM von Open JDK niedrig war
Die Geschichte, ein Projekt zu bauen, das Maven mit Ant gebaut hat
[Java] Die Geschichte, dass das erwartete Array nicht von der String.split-Methode erhalten wurde.
Formularklassenvalidierungstest mit Spring Boot
Bei der Einführung von JOOQ in Spring Boot wurde eine Geschichte behandelt, die behandelt wurde, weil bei Liquidbase ein Fehler aufgetreten ist
Einführung des Spring Boot Actuator, einer Funktion, die die Bedienung von Spring Boot-Anwendungen erleichtert
Organisieren Sie die Unterschiede im Verhalten von @NotBlank, @NotEmpty und @NotNull mit Spring Boot + Thymeleaf
Ruft den Klassennamen und den Methodennamen des Controllers ab, der vom HandlerInterceptor von Spring Boot ausgeführt wird
Rufen Sie den in der Controller-Klasse von Spring Boot definierten Pfad als Liste ab
Ressourcenhandler-Einstellungen bei der Bereitstellung von SPA mit der statischen Ressourcenfunktion von Spring Boot
Die Geschichte der Optimierung der Android-App mit libGDX
Wenn @Transactional of Spring Boot nicht funktioniert
Die Geschichte, dass der Port im Spring-Boot-Beispielprogramm unbrauchbar wird
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
Passen Sie die Anzeige an, wenn im Spring Boot ein Fehler wie 404 Not Found auftritt
Geben Sie die statische Ressourcencodierung in Spring Boot an
Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Erstellen Sie Restapi mit Spring Boot (bis zum Ausführen der App)
Booten nach Umgebung mit Spring Boot of Maven
Steuern Sie den Spring Batch-Verarbeitungsablauf mit JavaConfig.
Datei-Upload mit Spring Boot (keine mehrteilige Datei verwenden)
Die Geschichte von dto, dao-like mit Java, SQLite
Die Geschichte, dass das erzwungene Update nicht implementiert werden konnte
Die Geschichte, die zur Lösung des Fehlers führte, weil postgres nicht mit Docker-Compose begann
Die Geschichte, dass der Anforderungsparameter aus der iPhone-Anwendung mit dem Servlet nicht erfolgreich abgerufen werden konnte
Verwendung derselben Mapper-Klasse in mehreren Datenquellen mit Spring Boot + MyBatis
Auf die Version von Ruby, die standardmäßig auf dem Mac installiert war, wurde verwiesen, nicht von rbenv