1. ホーム
  2. java

[解決済み] ServletContext リソースを開くことができませんでした。

2022-02-09 17:31:51

質問

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

私は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.Could not load properties です。ServletContextリソース[/social.properties]を開くことができませんでした。

WARパッケージを確認したところ-。 .xml.properties ファイルは両方とも /WEB-INF/classes

.properties ファイルは src/main/resources.xmlsrc/main/java (のデフォルトパッケージで、maven はそれらを正しくトランスポートします (と思います)。 WEB-INF/classes

なぜこのような例外が発生するのか、どなたかご存知でしょうか?ありがとうございます。

EDIT: JUnitのテストが正常に行われたことを付け加えておきます。 social.properties が、アプリを実行すると、私の classpath: 接頭辞

解決方法は?

クラスパスを使用しない。これは、異なる 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>