web-dev-qa-db-ja.com

ServletContextリソースを開けませんでした

これは古いものと非常によく似た質問ですが、解決策は私にはうまくいきませんでした。

WARパッケージがあります。

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>

application-context.xml

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

しかし、これを取得する:

org.springframework.beans.factory.BeanInitializationException:プロパティをロードできませんでした。ネストされた例外はJava.io.FileNotFoundException:ServletContextリソース[/social.properties]を開けませんでした

WARパッケージを確認しました-.xmlおよび.propertiesファイルは両方とも/WEB-INF/classesにあります

.propertiesファイルはsrc/main/resourcesにあり、.xmlにはsrc/main/Javaにあり(デフォルトパッケージの両方にあります)、MavenはそれらをWEB-INF/classesのデフォルトパッケージに正しく転送します。

この例外が発生する理由を誰もが知っていますか?ありがとうございました。

編集:JUnitテストが正しく行われることを追加したいだけです(つまり、social.propertiesから必要なものをロードすることを意味します)が、アプリを実行するときにclasspath:プレフィックスを無視します

33
kuncajs

クラスパスを使用しないでください。これにより、異なるClassLoader(コンテナとアプリケーション)で問題が発生する場合があります。 WEB-INFは常により良い選択です。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>

そして

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="location">
         <value>/WEB-INF/social.properties</value>
     </property>
</bean>
32
kromit

/src/main/resources/foo/bar.propertiesのようなものを入れてから、それらをclasspath:/foo/bar.propertiesとして参照します。

13
pkopac

代わりにclasspath*:プレフィックスを使用してみてください。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-classpath-wildcards

また、すべてのファイルが存在することを確認するために、展開された戦争を展開してみてください。

5
Ivan.Latysh

このコードで試してみてください...

 <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>
0
jaleel

プロパティファイルが「/ WEB-INF/classes」にあることを確認して使用してみてください

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

TomcatでWARファイルを解凍していますか? WARファイルがロードされ、notがアンパックされている場合、クラスパスでファイルが見つからないようです。

0
Michiel Verkaik

現在、application-context.xmlファイルはsrc/main/resourcesにあり、social.propertiesファイルはsrc/main/Javaにあると思うので、パッケージ化(mvnパッケージ)またはTomcatの実行(mvn Tomcat:実行)あなたのsocial.propertiesが消えました(.warにチェックインしたときにファイルがここにあると言いましたが...あなたの例外は反対を言います)。

解決策は、すべての構成ファイル(application-context.xmlおよびsocial.properties)をsrc/main/resourcesに配置して、Maven標準構造に従うことです。

0
equesada

同じエラーが発生しました。

私のファイル名はjpaContext.xmlで、src/main/resourcesに配置されていました。パラメーターvalue="classpath:/jpaContext.xml"を指定しました。

最後に、ファイルの名前をapplicationContext.xmlに変更し、それをWEB-INFディレクトリに移動して、パラメーター値を/WEB-INF/applicationContext.xmlに変更しました。

0
Himanshu Shukla