Can't load property file for property-placeholder
-
12-12-2019 - |
Вопрос
my property file is under the following path:
src\main\resources\META-INF\app-config.properties
and my spring configuration files are under the path:
WebContent\WEB-INF
and when trying to load the property file as follows:
<context:property-placeholder
location="classpath:META-INF/app-config.properties" />
i am getting the exception:
java.io.FileNotFoundException: class path resource [META-INF/app-config.properties] cannot be opened because it does not exist
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:jms="http://www.springframework.org/schema/jms" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:lang="http://www.springframework.org/schema/lang" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:oxm="http://www.springframework.org/schema/oxm" xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<import resource="application-Security-Context.xml" />
<import resource="application-DataAccess-Context.xml" />
<import resource="application-Service-Context.xml" />
<context:component-scan base-package="com.myapp" />
<!-- PERSISTENCE -->
<context:property-placeholder
location="classpath:META-INF/app-config.properties" />
<jee:jndi-lookup id="appDS" jndi-name="MyApp" expected-type="javax.sql.DataSource"/>
<bean id="persistenceUnitManager"
class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="defaultDataSource" ref="appDS" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitManager" ref="persistenceUnitManager" />
<property name="persistenceUnitName" value="MyApp" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
applicationContext is loaded in web.xml as follows:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
i am using ant to build my project, am i missing ant configuration or eclipse configuration for this issue ?
ant config:
<zipfileset dir="${basedir}/src/main/resources/META-INF" includes="app-config.properties" fullpath="WEB-INF/classes/META-INF/app-config.properties"/>
also i added the META-INF folder to the deployment assembly in eclipse.
please advise how to load this property file correctly.
Решение
Can u try <context:property-placeholder
location="classpath*:META-INF/app-config.properties" />
If this also fails then may be your src\main\resources is not under the classpath.
Другие советы
I think the problem is in your path defined for properties file. Can you try the following one.
<context:property-placeholder location="classpath:/META-INF/app-config.properties" />
Hope this helps you.
Taking a bit of a guess here, as you say you are using eclipse, but not exactly when the exception occurs - from eclipse or the command line. If from within Eclipse, then you will need to align the Eclipse project settings with those Ant is using. Go under Project-Properties, but rather than the deployment assembly, go to the Java Build path and verify that all of your source inputs (both code and resources) are there. More importantly, verify that the output directories are set to the same ones Ant is using. Long shot, but worth a try!
Is the properties file actually in your compiled artifact? Can you show us a directory listing of your unzipped artifact so we can see if the file is present? Or are you running it right from Eclipse and the error comes there? If so, you need to adjust your Project Properties to include the directory and/or file.