Reading properties files in Spring with PropertyPlaceholderConfigurer bean
- Details
- Written by Nam Ha Minh
- Last Updated on 20 June 2019   |   Print Email
 Spring will read all the properties files declared by PropertyPlaceholderConfigurerbean to resolve the placeholders at application’s start up time.
Spring will read all the properties files declared by PropertyPlaceholderConfigurerbean to resolve the placeholders at application’s start up time. 1. A simple PropertyPlaceholderConfigurer example
Declare a PropertyPlaceholderConfigurer bean in Spring’s application context file as follows:<bean id="mailProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:mail.properties" /> </bean>That tells Spring to load the properties file named “mail.properties” in the classpath to resolve any placeholders ${…} found. An exception will be thrown if Spring could not find the specified properties file. The properties file has the following entries:
smtp.host=smtp.gmail.com smtp.port=587 smtp.user=tom@gmail.com smtp.pass=secretAnd the following bean declaration uses some placeholders which will be resolved by Spring:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
	<property name="host" value="${smtp.host}" />
	<property name="port" value="${smtp.port}" />
	<property name="username" value="${smtp.user}" />
	<property name="password" value="${smtp.pass}" />
</bean>Spring will replace these placeholders by actual values of the corresponding entries in the properties file. An exception will be thrown if a placeholder could not be resolved, e.g there is no entry with the specified key.
2. Location of the properties files
- By default, Spring looks for the properties files in the application’s directory. So if we specify:
<property name="location" value="WEB-INF/mail.properties" />
Then it will find the mail.properties file under WEB-INF directory of the application (in case of a Spring MVC application).
- We can use the prefix classpath: to tell Spring loads a properties file in the application’s classpath. For example:
<property name="location" value="classpath:mail.properties" />
In case of a Spring MVC application, the mail.properties file should be present in the WEB-INF/classes directory (or in the source directory (src) in Eclipse IDE).
- Use the prefix file:/// or file: to load a properties file from an absolute path. For example:
<property name="location" value="file:///D:/Config/mail.properties" />
NOTE: There is no white space between the prefixes classpath: and file: with the path of properties file.
3. Loading multiple properties files
Spring allows us to specify multiple properties files for the PropertyPlaceholderConfigurer bean declaration as follows:<bean id="appProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:mail.properties</value> <value>classpath:database.properties</value> </list> </property> </bean>That tells Spring to resolve the placeholders with entries loaded from both mail.properties and database.properties files in the application’s classpath.
4. Fallback or override with system properties
By default, if a placeholder could not be resolved by the specified properties files, Spring will try to resolve it with a system property. For example, if Spring could not resolve the placeholder ${user.dir}, it will try with the corresponding system property user.dir. This is call system properties mode fallback. We can change this behavior by specifying a property called systemPropertiesModeName of the PropertyPlaceholderConfigurerbean:<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_FALLBACK" />
Spring provides three modes as follows:- SYSTEM_PROPERTIES_MODE_FALLBACK: This is the default mode as mentioned above.
- SYSTEM_PROPERTIES_MODE_OVERRIDE: In this mode, Spring will resolve the placeholders to system properties first. If a system property does exist, its value will override the value in the properties file.
- SYSTEM_PROPERTIES_MODE_NEVER: Spring will not take system properties into consideration when resolving the placeholders.
 
<bean id="mailProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:mail.properties" /> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_NEVER" /> </bean>
5. Ignoring exceptions
By default, Spring will throw an exception if it could not find a properties file or could not resolve a placeholder. That cause the application fails to start.To ignore the exception which will be thrown in case a properties file could not be found, specify the following property of the PropertyPlaceholderConfigurer bean:<property name="ignoreResourceNotFound" value="true" />
For example:<bean id="mailProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:mail.properties" /> <property name="ignoreResourceNotFound" value="true" /> </bean>And to ignore the exception which will be thrown in case a placeholder could not be resolved, specify the following property of the PropertyPlaceholderConfigurerbean:
<property name="ignoreUnresolvablePlaceholders" value="true" />
For example:<bean id="mailProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:mail.properties" /> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean>When the property ignoreUnresolvablePlaceholders is set to true and a placeholder could not be resolved, Spring will inject name of the placeholder as it is.
Related Spring Tutorials:
- How to load multiple beans configuration files in Spring
- Understand the core of Spring framework
- Understand Spring MVC
- Spring MVC beginner tutorial with Spring Tool Suite IDE
- Spring MVC Form Handling Tutorial
- Spring MVC Form Validation Tutorial
- Spring MVC with JdbcTemplate Example
- Spring MVC + Spring Data JPA + Hibernate - CRUD Example
- 14 Tips for Writing Spring MVC Controller
- Spring and Hibernate Integration Tutorial Part (XML Configuration)
About the Author:
 Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He began programming with Java back in the days of Java 1.4 and has been passionate about it ever since. You can connect with him on Facebook and watch his Java videos on YouTube.
Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He began programming with Java back in the days of Java 1.4 and has been passionate about it ever since. You can connect with him on Facebook and watch his Java videos on YouTube.
Comments
what bean defination should i be using , its spring framework 4.3.5