これは古いものと非常によく似た質問ですが、解決策は私にはうまくいきませんでした。
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:
プレフィックスを無視します
クラスパスを使用しないでください。これにより、異なる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>
/src/main/resources/foo/bar.properties
のようなものを入れてから、それらをclasspath:/foo/bar.properties
として参照します。
代わりにclasspath*:
プレフィックスを使用してみてください。
また、すべてのファイルが存在することを確認するために、展開された戦争を展開してみてください。
このコードで試してみてください...
<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>
プロパティファイルが「/ WEB-INF/classes」にあることを確認して使用してみてください
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/classes/social.properties</value>
</property>
</bean>
TomcatでWARファイルを解凍していますか? WARファイルがロードされ、notがアンパックされている場合、クラスパスでファイルが見つからないようです。
現在、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標準構造に従うことです。
同じエラーが発生しました。
私のファイル名はjpaContext.xml
で、src/main/resources
に配置されていました。パラメーターvalue="classpath:/jpaContext.xml"
を指定しました。
最後に、ファイルの名前をapplicationContext.xml
に変更し、それをWEB-INFディレクトリに移動して、パラメーター値を/WEB-INF/applicationContext.xml
に変更しました。