web-dev-qa-db-fra.com

Spring Boot: @Value renvoie toujours null

Je voudrais utiliser une valeur du fichier application.properties afin de la transmettre à la méthode dans une autre classe. Le problème est que la valeur retourne toujours NULL. Quel pourrait être le problème? Merci d'avance.

application.properties

filesystem.directory=temp

FileSystem.Java

@Value("${filesystem.directory}")
private static String directory;
6
Jonathan Williams

Vous ne pouvez pas utiliser @Value sur des variables statiques. Vous devrez soit le marquer comme non statique ou chercher ici un moyen d'injecter des valeurs dans des variables statiques:

https://www.mkyong.com/spring/spring-inject-a-value-into-static-variables/

EDIT: Juste au cas où le lien se briserait dans le futur. Vous pouvez faire cela en faisant un setter non statique pour votre variable statique:

@Component
public class MyComponent {

    private static String directory;

    @Value("${filesystem.directory}")
    public void setDirectory(String value) {
        this.directory = value;
    }
}

La classe doit être un bean Spring, sinon elle ne sera pas instanciée et le passeur ne sera pas accessible avant Spring.

15
Plog

Peu de choses à vérifier en dehors de la réponse de @ Plog.

Les variables static ne peuvent pas recevoir de valeur. Vérifiez la réponse de @ Plog.

  • Assurez-vous que la classe est annotée avec @Component ou @Service
  • L'analyse des composants doit analyser le package contenant pour enregistrer les beans. Vérifiez votre XML si la configuration activée par XML.
  • Vérifiez si le chemin du fichier de propriétés est correct ou dans classpath.
3
Karthik R

Les autres réponses sont probablement correctes pour le PO.

Cependant, j'ai rencontré les mêmes problèmes (les champs @Value- annotés étant null) mais avec un problème sous-jacent différent:

import com.google.api.client.util.Value;

Assurez-vous d'importer la bonne classe d'annotation @Value! C’est une erreur TRÈS facile à faire, particulièrement avec la commodité des IDE de nos jours (j’utilise IntelliJ, et si vous importez trop rapidement sans lire CE QUE vous importez, vous risquez de perdre quelques heures comme moi).

Bien sûr, la classe correcte à importer est:

import org.springframework.beans.factory.annotation.Value;

0
scottyseus