14
Spring 3.1 Environnements, Sources de propriétés, Profils Fabien Baligand

Environnements, Sources de propriétés et Profils avec Spring 3.1

Embed Size (px)

DESCRIPTION

Présentation d'une des nouveautés de Spring 3.1 : l'abstraction d'environnement, avec les profils et les sources de propriétés

Citation preview

Page 1: Environnements, Sources de propriétés et Profils avec Spring 3.1

Spring 3.1Environnements,

Sources de propriétés, Profils

Fabien Baligand

Page 2: Environnements, Sources de propriétés et Profils avec Spring 3.1

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

Page 3: Environnements, Sources de propriétés et Profils avec Spring 3.1

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

Page 4: Environnements, Sources de propriétés et Profils avec Spring 3.1

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…

Page 5: Environnements, Sources de propriétés et Profils avec Spring 3.1

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

Page 6: Environnements, Sources de propriétés et Profils avec Spring 3.1

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);

Page 7: Environnements, Sources de propriétés et Profils avec Spring 3.1

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}"/>

Page 8: Environnements, Sources de propriétés et Profils avec Spring 3.1

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

Page 9: Environnements, Sources de propriétés et Profils avec Spring 3.1

9

Profils

Service1Service1

Profil « test »Profil « test »

Service2Service2

dataSourcedataSource

Profil « prod »Profil « prod »

dataSourcedataSource

application-context.xml

Page 10: Environnements, Sources de propriétés et Profils avec Spring 3.1

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>

Page 11: Environnements, Sources de propriétés et Profils avec Spring 3.1

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>

Page 12: Environnements, Sources de propriétés et Profils avec Spring 3.1

12

Profils

Définir le(s) profil(s) actif(s) :

Par code java :

ctx.getEnvironment().setActiveProfiles("test");

Par annotation :

@ActiveProfiles("test")

Page 13: Environnements, Sources de propriétés et Profils avec Spring 3.1

13

DEMO

Page 14: Environnements, Sources de propriétés et Profils avec Spring 3.1

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