JavaBlog.fr / Java.lu DEVELOPMENT,Java,Spring Spring: access to properties or parameters in all places of the application

Spring: access to properties or parameters in all places of the application

Hi,

I propose you a simple solution based on Spring context, PropertyPlaceholderConfigurer to load and access to properties or parameters in all places of an application.

First, we have a properties’ file (for example) named “myparameters.properties” in the server’s classpath (for example in the “etc” folder of TOMCAT server) containing:

# ################ ENVIRONMENT ##################
huo.config.mail.default.domain=huo-huo.huo

# ################ MAIL PARAMETERS ##################
huo.config.smtp.host=localhost
huo.config.smtp.port=25
huo.config.smtp.mailfrom=fromHuseyin@huo-huo.huo
huo.config.smtp.mailadministrators=tohuo@huo-huo.huo,topas@huo-huo.com,tofr@huo-huo.huo

Secondly, create a class containing a attribute for each parameter of above file. This class must used the “singleton” design pattern:

 
public class ConfigMyParameters {

	// ----------------------------------------------------- PRIVATE ATTRIBUTES
	/**
	 * Singleton instance
	 */
	private static ConfigMyParameters instance = null;

	/**
	 * Default mail domain
	 */
	private String defaultMailDomain = "";

	/**
	 * Contains the identity (email) used to send mails.
	 */
	private String smtpMailFrom = "";

	/**
	 * Smtp server host
	 */
	private String smtpMailhost = "";
	
	/**
	 * Smtp server port
	 */
	private String smtpMailport = "";
     
	/**
	 * Emails' list of administrators
	 */
	private List<String> mailAdministrators = new ArrayList<String>();

	// --------------------------------------------------------- PUBLIC METHODS
	/**
	 * @return an unique instance of the application configuration class.
	 */
	public static synchronized ConfigMyParameters getInstance() {
		if (null == instance) {
			String SPRING_FILE_NAME = "huo-spring-properties-config.xml";
			ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(SPRING_FILE_NAME);
			instance = (ConfigMyParameters) ctx.getBean("ConfigMyParameters");
		} // end-if
		return instance;
	}
	
	// ------------------------------------------------------ GETTERS & SETTERS
         // ....
}

And lastly, we need to create a spring context in order to load the properties’ file “myparameters.properties” with the singleton “ConfigMyParameters.java”. In our example, this file is named “huo-spring-properties-config.xml” (cf the “ConfigMyParameters.java” class.

<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-2.0.xsd            
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-autowire="no"
	default-lazy-init="false"
	default-dependency-check="none">

	<!-- 
	 | Retrieve the common configuration datasource, constants,...
	 --> 
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>classpath:myparameters.properties</value>
		</property>
	</bean>
	

	<!-- 
	 | This bean is only used to determine in which environment this business is executed
	 -->
	<bean id="ConfigMyParameters" class="huo.ConfigMyParameters">
		<!-- 
		 | ENVIRONMENT 
		 -->
		<property name="defaultMailDomain" value="${huo.config.mail.default.domain}" />

		<!--
		 | SMTP Parameters 
		 -->
		<property name="smtpMailhost" value="${huo.config.smtp.host}" />
		<property name="smtpMailport" value="${huo.config.smtp.port}" />
		<property name="smtpMailFrom" value="${huo.config.smtp.mailfrom}" />
		<property name="mailAdministrators" value="${huo.config.smtp.mailadministrators}" />
	</bean>
</beans>

So, all application’s properties or parameters are accessible in all places of the application due to the “ConfigMyParameters” class.
Example: ConfigMyParameters.getInstance().getMailAdministratorsAsArray()

To add a new parameter, it is necessary to:

  • add a line in the file “myparameters.properties” the form “KEY = VALUE”,
  • add a new private attribute in the class “ConfigMyParameters” with getter/setter,
  • change the Spring context file “huo-spring-properties-config.xml” to perform the mapping between the new parameter in properties’ file and class “ConfigMyParameters”.

SpringLoadAndAccessProperties.zip

Leave a Reply

Your email address will not be published.

Time limit is exhausted. Please reload CAPTCHA.

Related Post