web-dev-qa-db-fra.com

Spring @Value ne résout pas la valeur du fichier de propriétés

J'ai déjà travaillé dans un autre projet, je suis en train de refaire la même chose, mais pour une raison quelconque, cela ne fonctionne pas. Le @Value de printemps ne lit pas dans le fichier de propriétés, mais prend littéralement la valeur.

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

Dans mon contrôleur, où j'ai:

@Autowired
private AppConfig appConfig;

L’application commence très bien, mais quand je le fais

appConfig.getValue()

il revient 

${key.value1}

Cela ne résout pas la valeur dans le fichier de propriétés.

Pensées?

45
TS-

Le problème est dû à un problème dans applicationContext.xml vs spring-servlet.xml - il s’agissait d’un problème de périmètre entre les beans.

pedjaradenkovic m'a gentiment indiqué une ressource existante: L'annotation Spring @Value dans la classe @Controller n'évalue pas la valeur dans le fichier de propriétés et Spring 3.0.5 n'évalue pas l'annotation @Value des propriétés

16
TS-

J'ai aussi trouvé que la raison pour laquelle @value ne fonctionnait pas est que @value requiert PropertySourcesPlaceholderConfigurer au lieu d'une PropertyPlaceholderConfigurer. J'ai fait les mêmes modifications et cela a fonctionné pour moi. J'utilise Spring 4.0.3 release . 

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

Dans mon cas, les champs statiques ne seront pas injectés.

9
User007

J'utilisais Spring Boot et, pour moi, la mise à niveau de la version de 1.4.0.RELEASE à 1.5.6.RELEASE a résolu ce problème.

2
craastad

Lisez le commentaire de pedjaradenkovic.

En plus du lien fourni, la raison pour laquelle cela ne fonctionne pas est que le traitement de @Value nécessite une variable PropertySourcesPlaceholderConfigurer au lieu d'une PropertyPlaceholderConfigurer.

1
Muel

pour l'utilisateur Sprig-boot, PropertyPlaceholderConfigurer et le nouveau PropertySourcesPlaceholderConfigurer ajouté à Spring 3.1. il est donc facile d'accéder au fichier de propriétés. juste injecter 

Remarque: Assurez-vous que votre propriété n'est pas Static

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

Dans mon cas, il me manquait les accolades. J'ai eu @Value("foo.bar") String value au lieu de la forme correcte @Value("${foo.bar}") String value

0
Naruto Sempai