Actualmente estamos escribiendo una aplicación que se divide en varios proyectos / módulos. Por ejemplo, tomemos los siguientes módulos:
- myApp-DAO
- myApp-jabber
Cada módulo tiene su propio archivo xml de contexto Spring. Para el módulo DAO tengo un PropertyPlaceholderConfigurer que lee un archivo de propiedades con los parámetros de conexión de base de datos necesarios. En el módulo jabber también tengo un PropertyPlaceHolderConfigurer para las propiedades de conexión del jabber.
Ahora viene la aplicación principal que incluye myApp-DAO y myApp-jabber. Lee todos los archivos de contexto e inicia un gran contexto de Spring. Desafortunadamente, parece que solo puede haber un PropertyPlaceholderConfigurer por contexto, por lo que cualquier módulo que se cargue primero puede leer sus parámetros de conexión. El otro arroja una excepción con un error como "No se pudo resolver el marcador de posición 'jabber.host'"
Entiendo cuál es el problema, pero realmente no conozco una solución, o la mejor práctica para mi caso de uso.
¿Cómo configuraría cada módulo para que cada uno pueda cargar su propio archivo de propiedades? En este momento, saqué PropertyPlaceHolderConfigurer de los archivos de contexto separados y los combiné en el contexto de la aplicación principal (cargando todos los archivos de propiedades con un solo PropertyPlaceHolderConfigurer). Sin embargo, esto apesta, porque ahora todos los que usan el módulo dao tienen que saber que necesitan un PropertyPlaceHolderConfigurer en su contexto ... también fallan las pruebas de integración en el módulo dao, etc.
Tengo curiosidad por conocer soluciones / ideas de la comunidad de stackoverflow.
fuente
ignore-unresolvable="true"
, de lo contrario necesita.ignoreUnresolvablePlaceholders
? ¿Qué son los marcadores de posición irresolubles?PropertySourcesPlaceholderConfigurer
es la implementación de respaldo predeterminada desde Spring 3.1, por lo que es sensato usarla en lugar dePropertyPlaceholderConfigurer
como la clase de implementación de bean.Sé que esta es una vieja pregunta, pero el
ignore-unresolvable
propiedad no me funcionaba y no sabía por qué.El problema era que necesitaba un recurso externo (algo así como
location="file:${CATALINA_HOME}/conf/db-override.properties"
) yignore-unresolvable="true"
no funciona en este caso.Lo que se debe hacer para ignorar un recurso externo faltante es:
En caso de que alguien más se encuentre con esto.
fuente
ignore-unresolvable
yignore-resource-not-found
sirven para diferentes propósitos. Para evitar errores cuando el archivo de propiedades no existe, utiliceignore-resource-not-found="true"
. Para evitar errores cuando usa una propiedad que no existe en el archivo , useignore-unresolvable="true"
. Si tiene varios archivos, cada uno de los cuales contiene conjuntos parciales de propiedades, y cada archivo puede existir o no, deberá usar ambos.Puede tener varios
<context:property-placeholder />
elementos en lugar de declarar explícitamente varios beans PropertiesPlaceholderConfigurer.fuente
El
PropertiesPlaceholderConfigurer
bean tiene una propiedad alternativa llamada "propertiesArray". Use esto en lugar de la propiedad "propiedades" y configúrelo con<array>
referencias de propiedad.fuente
Probé la solución a continuación, funciona en mi máquina.
fuente: http://www.baeldung.com/2012/02/06/properties-with-spring/
fuente