IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Questions sur PropertyPlaceholder


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut Questions sur PropertyPlaceholder
    Bonjour,

    J'ai deux questions concernant le PropertyPlaceholder de Spring :

    1° J'ai besoin de charger deux fichiers properties dont un est optionnel car il définit un proxy dans le cas de nos environnements de dev.
    Aujourd'hui, on utilise un seul PropertyPlaceholder en lui donnant la location des deux fichiers et des "ignore" pour les deux. Mais il n'y a pas d'erreur au démarrage de l'appli si le fichier obligatoire n'est pas trouvé, ce qui n'est pas terrible.
    Je veux donc faire un truc comme ci-dessous, sauf que Spring n'a pas l'air d'aimer qu'on définisse deux PropertyPlaceholder. Y a-t-il un moyen ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <context:property-placeholder location="classpath:ws.properties" />
    <context:property-placeholder location="classpath:proxy.properties"
        ignore-resource-not-found="true" ignore-unresolvable="true" />
     
    <bean id="x" class="x">
        <property name="ipProxy" value="${proxy.ip}" />
        <property name="useTrustStore" value="${ws.useTrustStore}" />
    </bean>

    2° J'ai déjà un PropertyPlaceholder pour le proxy dans un autre fichier de contexte B. Si j'y fait appel dans mon fichier de contexte A, les propriétés ne sont pas trouvées. Le PropertyPlaceholder est local à un fichier uniquement ? (je précise qu'à côté de ça mes beans de B sont injectés sans problème dans mes beans de A)


    Cordialement.

  2. #2
    Membre éprouvé Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Par défaut
    Je veux donc faire un truc comme ci-dessous, sauf que Spring n'a pas l'air d'aimer qu'on définisse deux PropertyPlaceholder. Y a-t-il un moyen ?
    Tu obtiens quoi comme stackTrace ?

    Si tu veux définir 2 PropertyPlaceholder, tu dois utiliser la méthode "old-school", c'est-à-dire définir 2 beans de type "PropertyPlaceholderConfigurer" au lieu d'utiliser la balise "<context:property-placeholder"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <bean id="applicationProperties1" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    		<property name="location" value="classpath:application1.properties" />
    </bean>
     
    <bean id="applicationProperties2" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    		<property name="location" value="classpath:application2.properties" />
    </bean>
    Ou tu peux aussi utiliser cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <bean id="mergedProperties"
    		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    		<property name="propertiesArray">
    			<list>
    				<ref bean="applicationProperties1" />
    				<ref bean="applicationProperties2" />
    			</list>
    		</property>
    		<property name="ignoreUnresolvablePlaceholders" value="true" />
    	</bean>

    2° J'ai déjà un PropertyPlaceholder pour le proxy dans un autre fichier de contexte B. Si j'y fait appel dans mon fichier de contexte A, les propriétés ne sont pas trouvées. Le PropertyPlaceholder est local à un fichier uniquement ? (je précise qu'à côté de ça mes beans de B sont injectés sans problème dans mes beans de A)
    Peux-tu donner un morceau de code ? A mon avis, tu t'es peut-être trompé dans la configuration, mais en théorie, ce que tu viens d'énoncer devrait marcher.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Salut,

    1° La stacktrace c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'bagadManager' defined in class path resource [spring/services-applicationContext.xml]: Could not resolve placeholder 'proxy.useProxy'
    	at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:287)
    	at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75)
    	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:663)
    	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:638)
    ...
    Par rapport à ta réponse, le PropertiesFactoryBean remontera une exception si le fichier proxy n'est pas trouvé, non ? Je n'ai pas vu d'équivalent aux "ignore*" du Placeholder.
    Pour le deuxième cas, c'est à peu près ce que j'ai aujourd'hui, mais du coup je n'ai pas d'erreur lorsque le fichier ws n'est pas trouvé.


    2° Fichier B (security-applicationContext.xml) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <context:property-placeholder location="classpath:proxy.properties" ignore-resource-not-found="true" ignore-unresolvable="true" />
    Fichier A (services-applicationContext.xml) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <bean id="x" class="x">
        <property name="ipProxy" value="${proxy.ip}" />
    </bean>
    web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:/spring/services-applicationContext.xml
            classpath:/spring/security-applicationContext.xml
        </param-value>
    </context-param>
    Mais comme je disais, des beans de B sont, eux, correctement injectés dans des beans de A. Il n'y a que pour le fichier properties que ça pose problème.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Le paramètre location de context:property-placeholder est un tableau, donc il te suffit de mettre au tant de fichier properties que tu veux en les séparant par une virgule.
    Concernant ton environnement de dev, tu peux demander à Spring de te gérer des profil, donc en mode dev, il faut utiliser tel fichier properties, en mode prod, tel fichier c'est tout.

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo