Nous écrivons actuellement une application qui est divisée en plusieurs projets / modules. Par exemple, prenons les modules suivants:
- myApp-DAO
- myApp-jabber
Chaque module a son propre fichier xml de contexte Spring. Pour le module DAO, j'ai un PropertyPlaceholderConfigurer qui lit un fichier de propriétés avec les paramètres de connexion de base de données nécessaires. Dans le module jabber, j'ai également un PropertyPlaceHolderConfigurer pour les propriétés de connexion jabber.
Vient maintenant l'application principale qui comprend myApp-DAO et myApp-jabber. Il lit tous les fichiers de contexte et démarre un gros contexte Spring. Malheureusement, il semble qu'il ne puisse y avoir qu'un seul PropertyPlaceholderConfigurer par contexte, donc le module chargé en premier est capable de lire ses paramètres de connexion. L'autre lève une exception avec une erreur telle que "Impossible de résoudre l'espace réservé 'jabber.host'"
Je comprends en quelque sorte quel est le problème, mais je ne connais pas vraiment de solution - ni la meilleure pratique pour mon cas d'utilisation.
Comment configurer chaque module pour que chacun puisse charger son propre fichier de propriétés? En ce moment, j'ai déplacé le PropertyPlaceHolderConfigurer hors des fichiers de contexte séparés et les ai fusionnés dans le contexte de l'application principale (chargement de tous les fichiers de propriétés avec un seul PropertyPlaceHolderConfigurer). Cela craint, car maintenant, tous ceux qui utilisent le module dao doivent savoir qu'ils ont besoin d'un PropertyPlaceHolderConfigurer dans leur contexte ... les tests d'intégration dans le module dao échouent, etc.
Je suis curieux de connaître les solutions / idées de la communauté stackoverflow.
la source
ignore-unresolvable="true"
, sinon besoin.ignoreUnresolvablePlaceholders
? Que sont les espaces réservés insolubles?PropertySourcesPlaceholderConfigurer
est l'implémentation de support par défaut depuis Spring 3.1, il est donc judicieux de l'utiliser à la place dePropertyPlaceholderConfigurer
comme classe d'implémentation du bean.Je sais que c'est une vieille question, mais la
ignore-unresolvable
propriété ne fonctionnait pas pour moi et je ne savais pas pourquoi.Le problème était que j'avais besoin d'une ressource externe (quelque chose comme
location="file:${CATALINA_HOME}/conf/db-override.properties"
) et leignore-unresolvable="true"
ne fait pas le travail dans ce cas.Ce qu'il faut faire pour ignorer une ressource externe manquante est:
Juste au cas où quelqu'un d'autre se heurterait à ça.
la source
ignore-unresolvable
etignore-resource-not-found
servent à des fins différentes. Pour éviter les erreurs lorsque le fichier de propriétés n'existe pas, utilisezignore-resource-not-found="true"
. Pour éviter les erreurs lorsque vous utilisez une propriété qui n'existe pas dans le fichier , utilisezignore-unresolvable="true"
. Si vous avez plusieurs fichiers contenant chacun des ensembles partiels de propriétés et que chaque fichier peut exister ou non, vous devrez utiliser les deux.Vous pouvez avoir plusieurs
<context:property-placeholder />
éléments au lieu de déclarer explicitement plusieurs beans PropertiesPlaceholderConfigurer.la source
Le
PropertiesPlaceholderConfigurer
bean a une propriété alternative appelée "propertiesArray". Utilisez-la à la place de la propriété "properties" et configurez-la avec une<array>
référence de propriété.la source
J'ai essayé la solution ci-dessous, cela fonctionne sur ma machine.
source: http://www.baeldung.com/2012/02/06/properties-with-spring/
la source