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;
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.
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.
@Component
ou @Service
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;