2010-12-02 2 views
1

Salutations,Spring: Pourquoi ne pouvez-vous pas configurer deux ServletContextPropertyPlaceholderConfigurer dans un fichier .xml séparé?

Je travaille sur une application web à base de ressort. Situation est:

  1. il y a deux fichiers .xml une application context.xml, autre défaut-context.xml
  2. application context.xml sera charge au contexte Web lorsque tomcat a commencé, qui est configuré dans web.xml
  3. application context.xml ServletContextPropertyPlaceholderConfigurer chargé une importation properties.and default-context.xml

    parce default-context.xml est dans un autre projet, et je veux qu'il ait son propre. propriétés (default-context.propertie s) file et configure un ServletContextPropertyPlaceholderConfigurer pour qu'il charge les propriétés.

le résultat courant est que: les propriétés de default-context.properties n'est pas chargé, et le ServletContextPropertyPlaceholderConfigurer dans default-context.xml n'est pas inited. Il rend compte

ne peut pas résoudre espace réservé pour xxxxxx »

J'ai essayé quelques combinaisons,

1.to default-context.properties de charge dans ServletContextPropertyPlaceholderConfigurer de l'application-context.xml,

2.pour charger default-context.properties dans le fichier de PropertyPlaceholderConfigurer de application-context.xml, PAS de travail. pertyPlaceholderConfigurer ne peut pas être chargé dans un contexte de servlet?

3.loading default-context.properties dans default-context.xml dans les deux sens (ServletContextPropertyPlaceholderConfigurer ou PropertyPlaceholderConfigurer) NOT fonctionne.

Je ne peux pas comprendre pourquoi il n'y a qu'un seul ServletContextPropertyPlaceholderConfigurer peut être configuré dans le contexte de servlet?

configuration

est comme: en application context.xml

 <class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:etc/system.properties 
      </value> 

...

en défaut-context.xml:

<bean id="tempName123" 
    class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer" > 
    <property name="locations"> 
     <list> 
      <value>classpath:etc/default-datasource.properties</value> 
     </list> 
    </property> 
</bean> 

Répondre

2

Vous pouvez utiliser préfixe et suffixe d'espace réservé différent pour le deuxième bean. Avec la déclaration suivante, vous pouvez utiliser un espace réservé comme # [some.property.name].

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer" 
p:location="classpath:etc/default-datasource.properties" 
p:placeholderPrefix="#[" 
p:placeholderSuffix="]"> 
    </bean> 
+0

pour Ritesh, Merci pour votre réponse. J'ai essayé cette approche, le travail arent.Le deuxième bean ServletContextPropertyPlaceholderConfigurer n'était pas init ni chargé par le contexte. – Yang

+0

@Zac, je l'ai testé dans une classe JUnit et semble fonctionner sans aucune autre configuration. J'ai trouvé ce jira sur ce sujet: https://jira.springframework.org/browse/SPR-6428. Pourriez-vous essayer avec les propriétés 'ignoreUnresolvablePlaceholders' et 'order' sur les deux beans configure? Cela peut fonctionner sans déclarer le préfixe et le suffixe de l'espace réservé. – Ritesh

Questions connexes