Spring 3.1Environnements,
Sources de propriétés, Profils
Fabien Baligand
2
Notion d’environnement dans Spring
Les notions d’environnement, de sources de propriétés et de profils sont des nouveautés de Spring 3.1
L’environnement correspond au type de conteneur qui exécute votre application.
Spring 3.1 gère les environnements suivants: Standard : une simple application java standalone
StandardServlet : une application web dans un conteneur web
StandardPortlet : une portlet dans un conteneur de portlets
3
On connaît tous dans Spring, le fameux property placeholder :
<context:property-placeholder location="env.properties"/>
Cela permet notamment de définir des propriétés d’environnement positionnées dans un fichier properties, avec surcharge éventuelle dans les propriétés système.
Utilisation :
<property name="driverClass" value="${db.driver}"/>
Spring 3.1 reprend ce principe et l’abstrait en créant la notion de source de propriétés (PropertySource).
Sources de propriétés
4
Sources de propriétés
Sources de propriétés proposées par Spring :
Properties : un fichier de propriétés
SystemEnvironment : les propriétés système de la VM
ServletContext : les paramètres du contexte web (context-param dans web.xml)
ServletConfig : les paramètres de la servlet ou du filtre (init-param dans web.xml)
Jndi : les entrées JNDI de votre application
CommandLine : les paramètres d’appel de l’application
PortletConfig : les paramètres de déclaration de la portlet
Et d’autres encore…
5
Sources de propriétés
Un environnement contient une liste de sources de propriétés :
Standard :
Propriétés système de la JVM Propriétés système de l’OS
StandardServlet :
Standard ServletConfig ServletContext Jndi
StandardPortlet :
Standard ServletContext PortletContext PortletConfig Jndi
6
Sources de propriétés
Il est possible de créer sa propre source de propriétés :
public class MyPropertySource<MySource> extends PropertySource<T> { ... }
Il est possible d’ajouter des sources de propriétés à son environnement :
MyPropertySource source = ...
context.getEnvironment().getPropertySources().addFirst(source);
7
Environnement & sources de propriétés
Utilisation des propriétés dans Spring : Propriété de type « SystemProperty » :
<property name="prop" value="${java.io.tmpdir}"/>
Propriété de type « ServletContext » :
<property name="prop" value="${mySCParameter}"/>
Propriété de type « JNDI » :
<property name="prop" value="${my/jndi/value}"/>
8
Profils
Concept : Définir pour un même bean (de même identifiant),
une configuration par profil.
Exemple : Pour un bean ‘dataSource’, on aura
une configuration pour le profil ‘test’, pointant sur une base en mémoire
une configuration pour le profil ‘prod’, pointant sur une base externe
9
Profils
Service1Service1
Profil « test »Profil « test »
Service2Service2
dataSourcedataSource
Profil « prod »Profil « prod »
dataSourcedataSource
application-context.xml
10
Profils
application-context.xml :
<bean class="sample.PersonDao">
<constructor-arg ref="dataSource" />
</bean>
<beans profile="test">
<jdbc:embedded-database id="dataSource" type="H2" />
</beans>
<beans profile="prod">
<jee:jndi-lookup id="dataSource« jndi-name="java:comp/env/jdbc/ds" />
</beans>
11
Profils
Définir le(s) profil(s) actif(s) :
Par system property :
-Dspring.profiles.active="prod"
Par web.xml :
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>prod</param-value>
</context-param>
12
Profils
Définir le(s) profil(s) actif(s) :
Par code java :
ctx.getEnvironment().setActiveProfiles("test");
Par annotation :
@ActiveProfiles("test")
13
DEMO
14
Conclusion
Sources de propriétés : Moyen unifié de déclarer des propriétés, quelqu’en
soit la source
Plus puissant et flexible que le classique PropertyPlaceHolder
Peut être étendu à souhait
Profils : Permet de définir des beans spring spécifiques par
environnement
Très pratique pour définir des beans d’environnement spécifiques aux tests