Ajouter des propriétés à la propriété de l'espace réservé
J'ai une application dans laquelle une propriété de l'espace réservé est utilisé pour lire les propriétés, configuré en applicationContext.xml
:
...
<context:property-placeholder
location="classpath*:META-INF/spring/*.properties"/>
...
L'application s'exécute dans un Tomcat et utilise le paramètre défini dans context.xml.
L'accès de l'application de ce paramètre comme d'habitude les propriétés (@Value(${cfma.applicationUrl})
). Cela fonctionne
Dans mon cas de test je n'ai pas cette tomcat propriétés, donc je veux ajouter "à la main" pour le contexte de l'application. Mais aussi de la charge normale applicationContext.xml
testContext.xml:
<import resource="classpath:/META-INF/spring/applicationContext.xml" />
<context:property-placeholder properties-ref="simulatedTomcatProperties"/>
<util:properties id="simulatedTomcatProperties">
<prop key="cfmt.applicationBaseUrl">localhost:8080/cfmt</prop>
</util:properties>
Maintenant, j'ai deux contexte:propriété de l'espace réservé et cela ne fonctionne pas (bien sûr) – Donc ma question est, qui puis-je m'étendre les propriétés dans la “normale” de la propriété de l'espace réservé dans mon test?
Plus d'Explication de ce dont j'ai besoin:
- L'environnement productif (ainsi que le développement de l'environnement) définit certaines propriétés via Tomcat paramètre. Par conséquent, ils ne sont pas inclus dans les propriétés du fichier, mais nerveless ils peuvent être consultés comme d'habitude les propriétés (
@Value(${cfma.applicationUrl})
). En outre, il ne doit pas y avoir recours, si les propriétés ne sont pas définis dans le Tomcat, l'application ne doit pas commencer! - Dans le cas de test (qui utilisent le printemps contexte), je dois certaines comment insérer la propriété (cfma.applicationUrl), de sorte qu'il peut être injecté dans le annoté variables.
Mais si j'ajoute un deuxièmecontext:property-placeholder
ils ne sont pas fusionnées:
@Voir les Commentaires sur le https://jira.springsource.org/browse/SPR-4881 - ils expliquer ce comportement.
Quand je parle de Tomcat paramètre je parle somethink comme ceci:
context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Parameter name="cfmt.applicationBaseUrl"
value="http://localhost/demoApp" override="false"/>
</Context>
- Voir stackoverflow.com/questions/6375016/... Elle vous permet de définir plusieurs propriétés endroits. Propriétés manquantes fichiers sont ignorés, et le dernier valide fichier ci est chargé.
- Ma question n'est pas à propos de l'emplacement de multiples. Je s'accrochent avec les propriétés d'un espace réservé à configurer. Et je suis à la recherche d'un moyen de prolonger l'/modifier la configuration de la "normale" app contexte de la propriété de l'espace réservé configurer à partir de mon test-context.xml
- Désolé. Mon commentaire n'était pas très clair, je n'étais pas suggérer une manière de spécifier plusieurs fichiers de propriétés, mais une façon de faire du conditionnel propriétés des recherches. Une élargi réponse est ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Ne sais pas si cela va aider, mais ce que je fais dans une situation similaire est d'avoir 2 app.les propriétés des fichiers avec le même nom, à sec/test/resources et l'autre dans src/main/resources. Maintenant, pendant les essais du premier est chargé, car les classes de test sont tout d'abord sur le chemin de la classe, mais quand je ne déploient que le principal est là et elle est chargé.
Ne fonctionnera pas si vous ajoutez la même
location
attribut à lacontext:property-placeholder
défini danstestContext.xml
qui est celui défini à l'applicationContex.xml
? Vous aussi, vous avez besoin d'ajouter l'attributlocal-override="true"
avoir leproperties-ref
l'emportent sur ceux de sousMETA-INF
.Edit:
Donnée la plus récente de vos commentaire, je pense que vous aurez besoin de renoncer à l'aide de la
context
espace de noms et d'utiliser directement le Printemps des objets qui est utilise dans les coulisses. Peut-être quelque chose comme ceci:Dans applicationContext.xml:
Dans testContext.xml:
Je devine que vous voulez les propriétés locales de remplacer les propriétés définies à partir de la classpath ressources j'ai donc défini
localOverride
comme vrai.context:property-placeholder
definitons j'ai aussi à la propriété titulaire de place, et il n'y a pas fusionné.testContext.xml
aurait préséance sur celle deapplicationContext.xml
s'il est chargé à la 2ème place. Qu'est-ce que le mauvais comportement que vous voyez?Si, dans votre main applicationContext.xml, vous spécifiez plusieurs biens recherches comme indiqué ci-dessous à l'aide d'un PropertiesFactoryBean, tout manque des fichiers de propriétés ne sont pas chargés, et le dernier a été chargé avec succès les propriétés de fichier est utilisé. Dans votre cas, par défaut.propriétés (par exemple, votre tester les propriétés du fichier) serait chargé, et parce que le second fichier:${catalina}... ne serait pas chargé, votre @champs de Valeur serait injecté avec des valeurs spécifiées en défaut.les propriétés.
Répondre à des prises de ici:
<context:property-placeholder location="classpath*:META-INF/spring/*.properties"/>
n'est pas tellement. - Au moins vous suggérer à un fichier de propriétés pour les tests - droit?J'ai résolu le problème en divisant la
applicationContext.xml
dans deux fichiers:-
applicationContext.xml
-- contient la "normale" de la fève, mais PAS inclure deapplicationContext-properties.xml
-
applicationContext-properties.xml
-- contient la propriété de l'espace réservé configapplicationContext-properties.xml
:L'application web charge à la fois les fichiers de démarrage:
web.xml
:Pour mes tests, j'ai ajouté un propoperties fichier:
simulatedTomcat.test-properties
qui contient toutes les propriétés tomcat. remarque: que ce fichier ne correspond pas au modèle utilisé par les propriétés de l'espace réservé configurer deapplicationContext-properties.xml
Puis-je avoir des propriétés de l'espace réservé configurer pour mon test de charger les deux op fichiers de propriétés (
*.properties
et*.test-properties
)test-context.xml