Spring PropertyPlaceholderConfigurer Example
With this tutorial we are going to demonstrate how to use the PropertyPlaceholderConfigurer
. The PropertyPlaceholderConfigurer
is a property resource configurer that resolves placeholders in bean property values of context definitions. It pulls values from a properties file into bean definitions.
We can use it to externalize property values from a bean definition in a separate file using the standard Java Properties format. Doing so enables the person deploying an application to customize environment-specific properties such as database URLs and passwords, without the complexity or risk of modifying the main XML definition file or files for the container.
Let’s consider the simple case where we want to read some properties that are constant variables from an external Properties file. We need an XML-based configuration, where a PropertyPlaceholderConfigurer
bean must be defined. At runtime, the PropertyPlaceholderConfigurer
is applied to the metadata that will replace the properties of the bean. The values to replace are specified as placeholders of the form ${property-name}
.
Our preferred development environment is Eclipse. We are using Eclipse Juno (4.2) version, along with Maven Integration plugin version 3.1.0. You can download Eclipse from here and Maven Plugin for Eclipse from here. The installation of Maven plugin for Eclipse is out of the scope of this tutorial and will not be discussed. We are also using Spring version 3.2.3 and the JDK 7_u_21.
Let’s begin.
1. Create a new Maven project
Go to File -> Project ->Maven -> Maven Project.
In the “Select project name and location” page of the wizard, make sure that “Create a simple project (skip archetype selection)” option is checked, hit “Next” to continue with default values.
In the “Enter an artifact id” page of the wizard, you can define the name and main package of your project. We will set the “Group Id” variable to "com.javacodegeeks.snippets.enterprise"
and the “Artifact Id” variable to "springexample"
. The aforementioned selections compose the main project package as "com.javacodegeeks.snippets.enterprise.springexample"
and the project name as "springexample"
. Hit “Finish” to exit the wizard and to create your project.
The Maven project structure is shown below:
- It consists of the following folders:
- /src/main/java folder, that contains source files for the dynamic content of the application,
- /src/test/java folder contains all source files for unit tests,
- /src/main/resources folder contains configurations files,
- /target folder contains the compiled and packaged deliverables,
- the pom.xml is the project object model (POM) file. The single file that contains all project related configuration.
2. Add Spring 3.2.3 dependency
- Locate the “Properties” section at the “Overview” page of the POM editor and perform the following changes:
Create a new property with name org.springframework.version and value 3.2.3.RELEASE. - Navigate to the “Dependencies” page of the POM editor and create the following dependencies (you should fill the “GroupId”, “Artifact Id” and “Version” fields of the “Dependency Details” section at that page):
Group Id : org.springframework Artifact Id : spring-web Version : ${org.springframework.version}
Alternatively, you can add the Spring dependencies in Maven’s pom.xml
file, by directly editing it at the “Pom.xml” page of the POM editor, as shown below:
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.snippets.enterprise</groupId> <artifactId>springexample</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <properties> <spring.version>3.2.3.RELEASE</spring.version> </properties> </project>
As you can see Maven manages library dependencies declaratively. A local repository is created (by default under {user_home}/.m2 folder) and all required libraries are downloaded and placed there from public repositories. Furthermore intra – library dependencies are automatically resolved and manipulated.
3. Create a simple Spring Bean with properties
We create a simple Spring Bean, HelloWorld
, that has two String fields. The fields must be filled with the values read from an external Properties file, that is constants.properties
.
HelloWorld.java:
package com.javacodegeeks.snippets.enterprise.services; public class HelloWorld { private String prefixProp; private String suffixProp; public String getPrefixProp() { return prefixProp; } public void setPrefixProp(String prefixProp) { this.prefixProp = prefixProp; } public String getSuffixProp() { return suffixProp; } public void setSuffixProp(String suffixProp) { this.suffixProp = suffixProp; } public void sayHello(){ System.out.println(prefixProp + "!"); } public void sayGoodbye(){ System.out.println(suffixProp + "!"); } }
constants.properties
prefix=Hello suffix=Goodbye
4. Define the PropertyPlaceholderConfigurer.
First, the PropertyPlaceholderConfigurer
is defined. It has a property named locations
with a value that is the properties file. The file must be in the project class path. Then, the helloWorldBean
can be defined, with the properties in the format ${property-name}
.
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>constants.properties</value> </property> </bean> <bean id="helloWorldBean" class="com.javacodegeeks.snippets.enterprise.services.HelloWorld"> <property name="prefixProp" value="${prefix}" /> <property name="suffixProp" value="${suffix}" /> </bean> </beans>
5. Run the application
In the App.class
we load the helloWorldBean
through the ApplicationContext
. The methods called use the properties’ values, that are loaded from the constants.properties
file.
App.java:
package com.javacodegeeks.snippets.enterprise; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.javacodegeeks.snippets.enterprise.services.HelloWorld; public class App { @SuppressWarnings("resource") public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloWorld hello = (HelloWorld) context.getBean("helloWorldBean"); hello.sayHello(); hello.sayGoodbye(); } }
6. Output
When we execute the application we get the values read from the properties file.
Hello!
Goodbye!
This was an example of how to define and use the Spring PropertyPlaceholderConfigurer
.
Download the Eclipse project of this tutorial : SpringPropertyPlaceHolderConfigurerExample.zip