C'est une question assez similaire à une plus ancienne mais la solution n'a pas fonctionné pour moi.
J'ai un package WAR.
Dans web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-context.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
Dans application-context.xml
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:social.properties</value>
</property>
</bean>
Mais obtenir ceci:
org.springframework.beans.factory.BeanInitializationException: impossible de charger les propriétés; l'exception imbriquée est Java.io.FileNotFoundException: impossible d'ouvrir la ressource ServletContext [/social.properties]
J'ai vérifié le package WAR - .xml
et .properties
les fichiers sont tous les deux dans /WEB-INF/classes
.properties
le fichier est dans src/main/resources
et .xml
dans src/main/Java
(dans le package par défaut) et maven les transporte (je pense) correctement dans le package par défaut de WEB-INF/classes
Est-ce que quelqu'un sait pourquoi je pourrais obtenir cette exception? Merci.
EDIT: Je veux juste ajouter que les tests JUnit se passent correctement (je veux dire qu'ils chargent ce qu'ils devraient à partir de social.properties
) mais lors de l'exécution de l'application, il ignore mon classpath:
préfixe
N'utilisez pas classpath. Cela peut entraîner des problèmes avec différents ClassLoaders (conteneur ou application). WEB-INF est toujours le meilleur choix.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>
et
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/social.properties</value>
</property>
</bean>
Mettez les choses comme /src/main/resources/foo/bar.properties
, puis référencez-les comme classpath:/foo/bar.properties
.
Essayez d'utiliser classpath*:
préfixe à la place.
Essayez également de déployer la guerre éclatée pour vous assurer que tous les fichiers sont là.
essayez avec ce code ...
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="locations">
<list>
<value>/social.properties</value>
</list>
</property>
</bean>
Assurez-vous que le fichier de propriétés est dans "/ WEB-INF/classes", essayez d'utiliser
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/classes/social.properties</value>
</property>
</bean>
Demandez-vous à Tomcat de décompresser le fichier WAR? Il semble que les fichiers soient introuvables sur le chemin de classe lorsqu'un fichier WAR est chargé et qu'il est pas en cours de décompression.
Je pense qu'actuellement le fichier application-context.xml est dans src/main/resources ET le fichier social.properties est dans src/main/Java ... donc quand vous empaquetez (paquet mvn) ou quand vous exécutez Tomcat (mvn Tomcat: run) vos social.properties ont disparu (je sais que vous avez dit quand vous avez vérifié dans le .war que les fichiers sont ici ... mais votre exception dit le contraire).
La solution consiste simplement à mettre tous vos fichiers de configuration (application-context.xml et social.properties) dans src/main/resources pour suivre la structure standard de maven.
J'ai eu la même erreur.
Mon nom de fichier était jpaContext.xml
et il a été placé dans src/main/resources
. J'ai spécifié param value="classpath:/jpaContext.xml"
.
Enfin, j'ai renommé le fichier en applicationContext.xml
et l'a déplacé vers le répertoire WEB-INF et a changé la valeur de paramètre en /WEB-INF/applicationContext.xml
, alors ça a marché!