2010-11-30 18 views
7

Estoy tratando de usar PropertyPlaceholderConfigurer en mi aplicación. Mi applicationContext-test.xml carga mi archivo de propiedades muy bien, pero mi applicationContext.xml arroja una excepción. En ambos casos, estoy cargando mi archivo de propiedades como esta:¿Por qué el contexto de mi aplicación normal no puede cargar mi archivo de propiedades?

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    <property name="location"> 
     <value>localdevelopment_Company.properties</value> 
    </property> 
</bean> 

Cuando ejecuto mis pruebas, no se queja, pero cuando comienzo mi servidor, consigo esta excepción:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/localdevelopment_Company.properties] 
    at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:78) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:663) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:638) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:519) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/localdevelopment_Company.properties] 
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:117) 
    at org.springframework.core.io.support.PropertiesLoaderSupport.loadProperties(PropertiesLoaderSupport.java:181) 
    at org.springframework.core.io.support.PropertiesLoaderSupport.mergeProperties(PropertiesLoaderSupport.java:161) 
    at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:69) 
    ... 21 more 

Me estoy volviendo loco tratando de hacer que esto funcione. ¿Alguien puede ayudar?

Respuesta

8

Esto se debe a que diferentes contextos de aplicación buscan sus recursos.

Un contexto de prueba de unidad examina el classpath, pero se ve un contexto de aplicación dentro de la aplicación web. Entonces, cuando su aplicación web busca localdevelopment_Company.properties, está buscando un archivo en la raíz de la aplicación web.

Si el archivo es en realidad en la ruta de clase, entonces usted necesita para anular la ubicación de búsqueda por defecto del contexto de aplicación web:

<value>classpath:localdevelopment_Company.properties</value> 
Cuestiones relacionadas