@Value() für application.properties [SpringBoot]

ExceptionOfExpectation

Aktives Mitglied
Hallo,
ich habe folgendes Problem:
Drei Klassen entnehmen Werte aus der application.properties File. Es sind sehr viele Werte, mit zwei von drei Klassen klappt das sehr gut, aber bei der MentalPropertiesFormula2 Klasse will es nicht funktionieren. Durch verschiedene Versuche hat sich ergeben, dass das Problem ir-wie in der MentalPropertiesFormul2 Klasse liegt:
Java:
package com.starter.tool.character.details;




import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties("mental-properties-formula2")

public class MentalPropertiesFormula2 implements Formula{

    @Value("calm")
    private String spiritualCondition;
  
    @Value("${com.starter.tool.character.details.mental-properties-formula2.inner_personality}")
    private String innerPersonality;
  
    @Value("${mental-properties-formula2.selfcommunication}")
    private String selftreatment;
  
    ...

  
  
  
  
   // Setters + Getters

    public String getSelftreatment() {
        return selftreatment;
    }

    public void setSelftreatment(String selftreatment) {
        this.selftreatment = selftreatment;
        this.mentalFormular.add(selftreatment);
    }

    ...
  
  

}
Die @ConfigurationProperties(...) Annotation funktioniert bei der anderen zwei Klassen, aber nicht mit der MentalProeprtiesFormul2. Wenn ich die Property Namen vollständig ausschreibe wie: "com.starter.tool.character.details.mental-proeprties-formula2.", dann funktioniert das, oder wenn ich ganz banal eigenen Wert in der @Value(...) einfüge, dann funktioniert es auch, aber es funktioniert nicht wenn ich zum Beispiel "mental-properties-formula2.selfcommunication" nehme, also sprich abkürze. Eigentlich müsste die Abkürzung funktionieren, da ich die @ConfigurationProperties("mental-properties-formula2") Annotation verwende, bei den anderen zwei Klassen klappt es. Hier ist der Ausschmitt aus der application.properties:
Code:
...
com.starter.tool.character.details.mental-properties-formula2.selfcommunication = selfdeception,
...

Zu dem ganzen erhalte ich folgende Fehlermeldung:
Code:
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.1.3)

2023-10-29T14:18:35.637+01:00  INFO 3644 --- [           main] c.s.tool.PropertiesWorkApplication       : Starting PropertiesWorkApplication using Java 20.0.1 with PID 3644 (C:\Users\iRahi\eclipse-workspace\PropertiesJSON\target\classes started by iRahi in C:\Users\iRahi\eclipse-workspace\PropertiesJSON)
2023-10-29T14:18:35.646+01:00  INFO 3644 --- [           main] c.s.tool.PropertiesWorkApplication       : The following 4 profiles are active: "optimistic", "pessimistic", "active", "passiv"
2023-10-29T14:18:36.502+01:00  WARN 3644 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mentalPropertiesFormula2': Injection of autowired dependencies failed
2023-10-29T14:18:36.522+01:00  INFO 3644 --- [           main] .s.b.a.l.ConditionEvaluationReportLogger :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-10-29T14:18:36.562+01:00 ERROR 3644 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mentalPropertiesFormula2': Injection of autowired dependencies failed
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:489) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1416) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:597) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:942) ~[spring-context-6.0.11.jar:6.0.11]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) ~[spring-context-6.0.11.jar:6.0.11]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.3.jar:3.1.3]
    at com.starter.tool.PropertiesWorkApplication.main(PropertiesWorkApplication.java:14) ~[classes/:na]
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'mental-properties-formula2.selfcommunication' in value "${mental-properties-formula2.selfcommunication}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180) ~[spring-core-6.0.11.jar:6.0.11]
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-6.0.11.jar:6.0.11]
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) ~[spring-core-6.0.11.jar:6.0.11]
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-6.0.11.jar:6.0.11]
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:191) ~[spring-context-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:920) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1358) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:713) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:696) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:483) ~[spring-beans-6.0.11.jar:6.0.11]
    ... 16 common frames omitted
Also soweit ich das lokalisiert habe, liegt das Problem ausschließlich in der MentalPropertiesFormula2, da ich die Suche schon mal mit dem @ComponentScan(...) abgekürzt habe. Im Endeffekt dieselbe Fehlermeldung, also gibt es von außen keine andere Dependencies. Hat jemand die Vorstellung was da noch in die Frage kommt?
 

ExceptionOfExpectation

Aktives Mitglied
Mir wäre es neu, dass er Teile des PropertyStrings nimmt und dieses injected.

Hast du versucht den ganzen String da einzugeben?

Siehe auch: https://www.baeldung.com/configuration-properties-in-spring-boot
Ja, das klappt, wenn ich den ganzen String nehme. Aber ich wollte unbedingt den kleinen Abschnitt nehmen und die @ConfigurationProperties(...) direkt dafür nutzen.
Ich wusste zuerst auch nicht, dass es geht, aber der chatgpt hat es mir mitgeteilt und schon haben die zwei anderen Klassen, die ähnlich aufgebaut sind nicht mehr gemeckert.
Danke, den Link habe ich schon Mal gestern gelesen, da steht nichts dazu
 

Marinek

Bekanntes Mitglied
Also ich meine schon, dass da so grob steht, was du brauchst.

Mit @ConfigurationProperties("mental-properties-formula2") kannst du den Prefix setzen, dann injected er bei den korrekt benannten Membern die Werte aus der Konfiguration.

Schau nochmal nach.
 

ExceptionOfExpectation

Aktives Mitglied
Also ich meine schon, dass da so grob steht, was du brauchst.

Mit @ConfigurationProperties("mental-properties-formula2") kannst du den Prefix setzen, dann injected er bei den korrekt benannten Membern die Werte aus der Konfiguration.

Schau nochmal nach.
Bin den Rat gefolgt und da steht nichts über dem Zusammenhang von @ConfigurationProperties() und @Value() Annotationen. Meine Variablen sind von Namen her unabhängig von den Propertie-Namen in Application.properties. Sie können unterschiedlich sein oder sogar gar nicht vorhanden sein. Deshalb möchte ich meine Klassen unabhängig gestallten.
 
Zuletzt bearbeitet:

ExceptionOfExpectation

Aktives Mitglied
Ist das eigentlich normal dass bei mir alle Property Werte mit gelben Warnschildern abgebildet werden und unterstrichen?
Bei allen steht das die Property Namen is an unknown property.
 

LimDul

Top Contributor
Irgendwie sieht das alles sehr merkwürdig aus.

@ConfigurationProperties dient dazu, über setter die Werte aus der Properties direkt zu setzen.
Dabei kann man einen Prefix angeben, damit er die passenden Setter findet. Siehe auch die Doku: https://docs.spring.io/spring-boot/...ntext/properties/ConfigurationProperties.html
Dafür muss aber zwingend der Setter gleich zur Property benannt

@Value dient zum direkten Injecten - da musst du dann aber den Namen vollständig ausschreiben.

Interessant wären die Klassen, wo es funktioniert.

Auf ChatGPT würde ich bei derartigen Detail-Fragen nix geben - da dürfte die Trefferrate von vollständig korrekten Antworten zu gering sein. Hauptquelle sollte die Spring Doku sein und Sekundärquellen wie baeldung und co.
 

ExceptionOfExpectation

Aktives Mitglied
Irgendwie sieht das alles sehr merkwürdig aus.

@ConfigurationProperties dient dazu, über setter die Werte aus der Properties direkt zu setzen.
Dabei kann man einen Prefix angeben, damit er die passenden Setter findet. Siehe auch die Doku: https://docs.spring.io/spring-boot/...ntext/properties/ConfigurationProperties.html
Dafür muss aber zwingend der Setter gleich zur Property benannt

@Value dient zum direkten Injecten - da musst du dann aber den Namen vollständig ausschreiben.

Interessant wären die Klassen, wo es funktioniert.

Auf ChatGPT würde ich bei derartigen Detail-Fragen nix geben - da dürfte die Trefferrate von vollständig korrekten Antworten zu gering sein. Hauptquelle sollte die Spring Doku sein und Sekundärquellen wie baeldung und co.
Habe bei dem Chatgpt nachgehackt, nun verleugnet er seine Aussage über den Zusammenhang zwischen @ConfigurationProperties() und @Value() Annotationen. Ich habe ihn deshalb geglaubt, weil es als einen sehr offensichtlichen und praktischen Weg schien, um die Performance zu steigern.
Somit falsche Alarm, vielen Dank Leute.
PS.: wie das bei anderen zwei Klassen klappen könnte weiß ich immer noch nicht, muss noch gucken
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Tests beim extracten von sub value schlägt fehl Frameworks - Spring, Play, Blade, Vaadin & Co 6
I has anybody experience with POI GWT? iterating more than one Cell infos(color, value, font...etc) and load them to a GXT Grid... Frameworks - Spring, Play, Blade, Vaadin & Co 0
N MongoDB-Spring "Cannot use a complex object as a key value" Frameworks - Spring, Play, Blade, Vaadin & Co 0
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Konfigurierbarer Filter für OSGi service-Referenz in blueprint Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand Suche "Wizard" für Vaadin für Unterstützung bei Erstbenutzung von Funktionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Wie schreibt man Test für einen Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 5
Zrebna Vaadin: ToolbarButton - Breite für Caption reicht nicht aus. Frameworks - Spring, Play, Blade, Vaadin & Co 1
D SpringBootTest H2 Database für Test Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Kein Endpoint für Swagger UI Frameworks - Spring, Play, Blade, Vaadin & Co 6
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Z JPA Extra-Entity für Many-To-Many gewissermaßen zu Fuß Frameworks - Spring, Play, Blade, Vaadin & Co 5
R Architektur für Spring Boot Projekt Frameworks - Spring, Play, Blade, Vaadin & Co 5
LesterBurnham Spring, Config Server, mehrere Gitlab Repos für Konfiguration - best practices Frameworks - Spring, Play, Blade, Vaadin & Co 1
J Framework für KI Frameworks - Spring, Play, Blade, Vaadin & Co 4
Thallius Gibt es einen "Standard" Folder für Spring deployment auf Linux Servern? Frameworks - Spring, Play, Blade, Vaadin & Co 13
C Suche Tutorial für - Spielfiguren springen lassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
K Spring Security für Java SE Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Konfiguration von Spring Security für httpBasic Auth und jdbc Authentication. Frameworks - Spring, Play, Blade, Vaadin & Co 3
J Resolver für XML Schema Location beim Laden des Spring Application Context Frameworks - Spring, Play, Blade, Vaadin & Co 1
G Suche einfaches Beispiel für AspectJ (ohne Spring AOP) Frameworks - Spring, Play, Blade, Vaadin & Co 1
B Buchempfehlung für Groovy, Spring, Hibernate, SOAP, J2EE gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 1
G Spring <spring:message für Images Frameworks - Spring, Play, Blade, Vaadin & Co 1
A Spring MVC / JSP und Defaultwerte für nicht ausgefüllte Textfelder Frameworks - Spring, Play, Blade, Vaadin & Co 0
A Eclipse Projekt für Entwicklung mit Spring Webflow 2.2 Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring IDE Plugin für eclipse Frameworks - Spring, Play, Blade, Vaadin & Co 12
S Wo kann man das Spring IDE Plugin für Eclipse downloaden? Frameworks - Spring, Play, Blade, Vaadin & Co 0
A Anleitung für JSF 2.0 und Spring Web Flow 2.1 Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring für Anfänger Frameworks - Spring, Play, Blade, Vaadin & Co 21
I Annotation für JSF 1.2 bei SPRING 3.0 Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Datenbank und Application Konsistents Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
padde479 APPLICATION FAILED TO START Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Integration Tests als Application? Frameworks - Spring, Play, Blade, Vaadin & Co 0
8u3631984 Test Properties aus application.yml Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Testcontainer : Copy Application.proprties in Container und starte erst danach Frameworks - Spring, Play, Blade, Vaadin & Co 2
8u3631984 Mehere gleichnamige Konfigurationsparameter in einer application.properties Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring: Testen von unterschiedlichen application.properties Werten Frameworks - Spring, Play, Blade, Vaadin & Co 6
tom.j85 SpringBoot Rest-Application funktioniert nicht - Keine Fehlermeldungen Frameworks - Spring, Play, Blade, Vaadin & Co 13
L SpringBoot Web Application Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Günstigste oder kostenlose Variante SpringBoot Application laufen zu lassen Frameworks - Spring, Play, Blade, Vaadin & Co 7
deetee Eclipse Maven project builder Fehler mit Spring application xml Frameworks - Spring, Play, Blade, Vaadin & Co 2
L Spring Application mit Hessian Remote-Zugriff Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Spring Security Tutorial ohne Web application Frameworks - Spring, Play, Blade, Vaadin & Co 4

Ähnliche Java Themen

Neue Themen


Oben