Créer un service de configuration avec Spring (1)
Par Emmanuel le vendredi 18 juillet 2008, 11:12 - Spring - Lien permanent
Nom du projet : mp-spring-service-1
Utilité du projet : utiliser Spring pour créer un service permettant de gérer des propriétés de configuration.
Points techniques :
- utilisation de l'interface Resource de Spring, permettant de charger des fichiers (aperçu des préfixe classpath: , file: ...)
- utilisation de spring-test avec junit 4.4 pour tester le service
Détails :
Dans un premier temps on crée une simple servlet AfficherMessagesAction.
Imaginons que cette servlet ait besoin de propriétés de configuration. Une url vers une autre application par exemple, ou un paramètre "nombre de lignes par tableau"...
Il est souhaitable de configurer cette propriété dans un fichier .properties et de pouvoir la récupérer facilement par la suite.
On va donc créer un service ConfigurationService qui va charger ce fichier .properties et rendre les paramètres de configuration disponibles dans toute l'application.
Projet réalisé avec :
Eclipse Europa 3.3.1.1
Apache Tomcat 5.5.26
Plugin Maven pour Eclipse http://m2eclipse.codehaus.org/
Java JDK 1.5
Spring 2.5.5
(Les sources du projet sont disponibles en annexe)
1- Création de l'interface ConfigurationService
Les fonctionnalités de notre service de configuration sont très simples. On veut pouvoir :
- obtenir une propriété à partir d'une clé
- obtenir le nombre de propriétés de notre service
- pouvoir initialiser ce service
D'où l'interface suivante :
public interface ConfigurationService { /** * Initialisation du service de configuration */ void init(); /** * Récuparation d'une propriété à partir de sa clé * @param key clé * @return - une propriété <br> * - null si la clé est null, ou si elle n'existe pas */ String getProperties(String key); /** * Retourne le nombre de propriétés * @return */ int getNbProperties(); }
2- Création de l'implémentation ConfigurationServiceImpl
public class ConfigurationServiceImpl implements ConfigurationService { private Properties properties; private Resource resource; private static Log logger = LogFactory.getLog(ConfigurationServiceImpl.class); public String getProperties(String key) { if(key==null || "".equals(key)) { return null; } else { String propertie = properties.getProperty(key); if(propertie==null) { logger.warn("Aucune propriete associee a la cle : "+key); } return propertie; } } public void init() { properties = new Properties(); if(resource!=null) { //on verifie que le fichier resource existe if(resource.exists()) { try { //on charge le fichier resource dans l'objet properties properties.load(resource.getInputStream()); } catch (IOException e) { logger.warn("Erreur lors du chargement du fichier resource : "+ resource.getDescription(),e); } } else { logger.warn("Le fichier resource n'existe pas : "+ resource.getDescription()); } } else { logger.warn("Le fichier resource est null"); } } public int getNbProperties() { if(properties==null) { return 0; } else { return properties.size(); } } public void setResource(Resource resource) { this.resource = resource; } }
Précisions :
- Les propriétés utilisées dans toute notre application sont stockées dans un Properties.
- On définit un attribut resource avec son setter public. Avec Spring, nous allons pouvoir charger un fichier au démarrage de l'application.
- La méthode init utilise la ressource chargée pour remplir l'objet properties.