In the previous part we learned about the Spring Configurator. In this part we learn how to create properties for different environments (or running modes) and how to use them.
First we add a simple String property with the name text
to our Sample
class:
package com.mrhaki.spring.mavenapp; import org.apache.cocoon.configuration.Settings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Sample { private Settings settings; private String text; @Autowired public void setSettings(Settings settings) { this.settings = settings; } public void setText(String name) { this.text = name; } @Override public String toString() { return "Running in [" + settings.getRunningMode() + "] mode. " + "Text = [" + text + "]."; } }
Notice how we changed the toString
method so we can see the value for the text
property. Next we add the bean definition for the Sample
class in our applicationContext.xml
. Therefore we add the following lines after <configurator:settings/>
:
<bean name="sample" class="com.mrhaki.spring.mavenapp.Sample"> <property name="text" value="${sample.text}"/> </bean>
At line 2 we assign the text
property a variable value, which is not set yet. The value will be set if we run the application and is read from a property file. We can now use the Spring Configurator to define a different value for sample.text
for every running mode we want to support. For this example we assume a dev and test running mode. If we read the Spring Configuration manual we notice we can place the property files at many locations. This is what makes the Spring Configurator so flexible and useful.
First we create in the src/main/resources
directory the following directories: META-INF/cocoon/properties/dev
and META-INF/cocoon/properties/test
. We create a sample.properties
file in the src/main/resources/META-INF/cocoon/properties/dev
directory. In the file we define:
sample.text=We are developing!
We save the file and if we run mvn test -Dorg.apache.cocoon.mode=dev
we get the following output:
Running in [dev] mode. Text = [We are developing!].
The Spring Configurator has replaced our variable sample.text
with the value from the property file. We also create a sample.properties
file in the src/main/resources/META-INF/cocoon/properties/test
directory and give a different value for the property:
sample.text=Ready for testing!
We run the test again, but now use the test running mode:mvn test -Dorg.apache.cocoon.mode=test
. And we get this output:
Running in [test] mode. Text = [Ready for testing!]
Finally we create a sample.properties
in the src/main/resources/META-INF/cocoon/properties
directory with a default value, which is used by the default running mode (prod):
sample.text=We are alive!
We run mvn test
and we see in the output:
Running in [prod] mode. Text = [We are alive!].
So in this part we have learned how to use property files for different running modes to replace variables in the Spring configuration files. In the next part we learn how override properties of beans defined in Spring configuration files.