Spring @Value löst den Wert aus der Eigenschaftsdatei nicht auf

Lesezeit: 3 Minuten

Benutzer-Avatar
TS-

Ich hatte das schon einmal in einem anderen Projekt, ich mache gerade dasselbe, aber aus irgendeinem Grund funktioniert es nicht. Der Frühling @Value liest nicht aus der Eigenschaftsdatei, sondern nimmt den Wert wörtlich

AppConfig.java

@Component
public class AppConfig
{
    @Value("${key.value1}")
    private String value;

    public String getValue()
    {
        return value;
    }
}

applicationContext.xml:

<context:component-scan
    base-package="com.test.config" />
<context:annotation-config />

<bean id="appConfigProperties"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:appconfig.properties" />
</bean>

appconfig.properties

key.value1=test value 1

In meinem Controller, wo ich habe:

@Autowired
private AppConfig appConfig;

Die Anwendung startet ganz gut, aber wenn ich es tue

appConfig.getValue()

es kehrt zurück

${key.value1}

Es wird nicht in den Wert in der Eigenschaftendatei aufgelöst.

Gedanken?

  • Dupliziertes stackoverflow.com/questions/11890544/… und stackoverflow.com/questions/5275724/…

    – Pedjaradenkovic

    10. April 2013 um 22:29 Uhr


  • Vielen Dank! Ich habe diesen Thread nicht gefunden, die meisten, die ich gefunden habe, beziehen sich auf den Wert NULL

    – TS-

    11. April 2013 um 12:55 Uhr

Benutzer-Avatar
Sachchidanand Singh

Den Grund habe ich auch gefunden @value hat nicht funktioniert, @value erfordert PropertySourcesPlaceholderConfigurer anstelle einer PropertyPlaceholderConfigurer. Ich habe die gleichen Änderungen vorgenommen und es hat bei mir funktioniert, ich verwende die Version Spring 4.0.3. Ich habe dies mit dem folgenden Code in meiner Konfigurationsdatei konfiguriert –

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

  • Weitere Informationen zu dieser Konfiguration erhalten Sie unter blog.codeleak.pl/2015/09/placeholders-support-in-value.html

    – Kishor K

    21. Dezember 2017 um 12:52 Uhr


  • FYI: Sie müssen diese Bean nicht mehr mit Spring Boot 1.5.9 hinzufügen.

    – realPK

    21. Februar 2018 um 19:49 Uhr

  • @realPK sieht so aus wie du, ich bin auf Spring 4.2.6 und musste es noch hinzufügen.

    – Florian Wicher

    10. Dezember 2019 um 16:38 Uhr

  • @FlorianWicher Ich habe über Spring Boot gesprochen, von dem ich glaube, dass es Spring Framework 4.3 verwendet. Bezug – spring.io/blog/2017/11/28/spring-boot-1-5-9-now-available.

    – realPK

    12. Dezember 2019 um 0:38 Uhr

  • @Florian Wicher – Vielleicht könnten Sie versuchen, die Spring Boot-Version auf 2.x zu aktualisieren, und Sie könnten dies vermeiden.

    – Sachchidanand Singh

    12. Dezember 2019 um 6:20 Uhr


In meinem Fall werden keine statischen Felder injiziert.

  • Musste das nur entfernen static Schlüsselwort und es funktioniert jetzt gut!

    – takanuva15

    20. Februar 2020 um 20:34 Uhr


  • Hat bei mir auch funktioniert. Es ist seltsam, weil ich statische Felder mit @Value in anderen Klassen habe, die gut funktionieren.

    – Chris Nieve

    27. August 2020 um 19:49 Uhr


  • für mich möchte ich statische felder verwenden, wie kann ich das bei statischen feldern erreichen

    – Rookie007

    26. Oktober 2021 um 13:14 Uhr

  • Wenn jemand wissen möchte, wie dies bei statischen Feldern erreicht werden kann, verwenden Sie eine nicht statische Setter-Methode und verwenden Sie @value zusätzlich zur Setter-Methode (Setter-Injektion) anstelle der Feldinjektion.

    – Wikram

    4. August um 14:08 Uhr

Benutzer-Avatar
TS-

Das Problem ist auf ein Problem in meiner applicationContext.xml vs. spring-servlet.xml zurückzuführen – es war ein Scoping-Problem zwischen den Beans.

pedjaradenkovic hat mich freundlicherweise auf eine vorhandene Ressource hingewiesen: Spring @Value-Annotation in der @Controller-Klasse wertet den Wert in der Eigenschaftendatei nicht aus, und Spring 3.0.5 wertet die @Value-Annotation nicht aus Eigenschaften aus

In meinem Fall fehlten mir die geschweiften Klammern. ich hatte @Value("foo.bar") String value statt der richtigen Form @Value("${foo.bar}") String value

Benutzer-Avatar
Dapper Dan

für Sprig-boot-Benutzer sowohl PropertyPlaceholderConfigurer als auch der neue PropertySourcesPlaceholderConfigurer, der in Spring 3.1 hinzugefügt wurde. Es ist also einfach, auf die Eigenschaftendatei zuzugreifen. einfach spritzen

Hinweis: Stellen Sie sicher, dass Ihr Eigentum nicht sein muss Static

@Value("${key.value1}")
private String value;

Benutzer-Avatar
kraastad

Ich habe Spring Boot verwendet und für mich die Version von aktualisiert 1.4.0.RELEASE zu 1.5.6.RELEASE dieses Problem gelöst.

Benutzer-Avatar
Ahmed Aziz

In meinem Fall hatte ich den lombok @AllArgsConstructor und der hat auch die Eigenschaft übernommen. Das Löschen dieser Anmerkung löste das Problem.

1216770cookie-checkSpring @Value löst den Wert aus der Eigenschaftsdatei nicht auf

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy