Spring 3.0 Could not load properties

自作多情 提交于 2019-12-22 12:29:29

问题


Im the getting the following Error/exception when deploying web app:

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/WebAppProps]

Below is the context tag that Im using in applicationContext.xml to point to WebAppsProps.properties file

   <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    p:location="classpath:/WEB-INF/WebAppProps.properties" />

I have also used:

  <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    p:location="/WEB-INF/WebAppProps.properties" />

The file is actualy in the filesystem & below is the snapshot of my project structure:

I also tried , putting "WebAppProps.properties" on the classpath and used these 2 variations

variation 1:

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

variation 2:

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

Please see below:

However Im still getting same error/exception.

Please Advise

Thank you


回答1:


Same issue i crossed,

Fix: Solution your bean like below:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
    <value>/WEB-INF/database.properties</value>
  </property>
</bean>

create folder properties under WEB-INF it look like WEB-INF/properties/database.properties

because the class PropertyPlaceholderConfigurer default search properties folder first under /WEB-INF/ so it concatenate your file name as path




回答2:


I think that you should change your code and put the properties like that :

    <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/jdbc.properties" />
</bean>



回答3:


Spring 4 this is how I would configure the properties file

@Configuration
@PropertySources({
        @PropertySource("classpath:application.properties"),
        @PropertySource(value = "${application.properties}", ignoreResourceNotFound = false)
})
public class WebServiceConfig {
---
}

And when starting my tomcat in setenv.sh I define the path as

-Dapplication.properties=file:location-of-file/application.properties"

Notice file: prefix here. That is important.

Now you can drop file anywhere on your file system and change the path without ever changing the code




回答4:


<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">
        <value>WebAppProps.properties</value>
    </property>
</bean>

Just put the file on the classpath in the root of the classes directory.




回答5:


you have 2 options:

if you dont need to get the bean, but only the properties:

<context:property-placeholder location="/WEB-INF/WebAppProps.properties" file-encoding="UTF-8"/>

or if you need the bean (it may happens you want to inject your properties bean, if you need to read many props...)

<bean id="configProperty" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
               <value>/WEB-INF/config.properties</value>
               <value>/WEB-INF/setup.properties</value>
           </list>
    </property>
    <property name="ignoreResourceNotFound" value="true"/>
</bean>


来源:https://stackoverflow.com/questions/10627856/spring-3-0-could-not-load-properties

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!