¿Es posible tener varios PropertyPlaceHolderConfigurer en mi applicationContext?

Necesito cargar un archivo applicationContext.xml específico de acuerdo con una propiedad del sistema dada. Esto mismo carga un archivo con la configuración real. Por lo tanto, necesito 2 PropertyPlaceHolderConfigurer, uno que resuelve el parámetro del sistema y el otro dentro de la configuración real.

¿Alguna idea de como hacer esto?

Sí, puedes hacer más de uno. Asegúrese de establecer ignoreUnresolvablePlaceholders para que el primero ignore cualquier marcador de posición que no pueda resolver.

    classpath*:/my.properties        classpath*:/myOther.properties    

Dependiendo de su aplicación, debe investigar systemPropertiesMode, le permite cargar propiedades desde un archivo, pero permite que las propiedades del sistema anulen los valores en el archivo de propiedades, si está configurado.

Cuidado: puede haber un error relacionado con varios configuradores. Ver http://jira.spring.io/browse/SPR-5719 para más detalles.

No puedo hacer que múltiples trabajen localmente … pero todavía no estoy culpando a nadie más que a mí.

Otra solución es usar la propiedad placeholderPrefix de PropertyPlaceholderConfigurer. Usted lo especifica para el segundo (tercero, cuarto …) configurador, y luego pone un prefijo a todos sus marcadores de posición correspondientes, por lo tanto no habrá conflicto.

   

No se puede hacer esto directamente, y esta edición de JIRA de Spring explica por qué (ver el comentario de Chris Beams para una explicación detallada):

https://jira.springsource.org/browse/SPR-6428

Sin embargo, sí proporciona una solución con Spring 3.1 o posterior, que consiste en utilizar la clase PropertySourcesPlaceholderConfigurer en lugar de la clase PropertyPlaceholderConfigurer.

Puede descargar un proyecto basado en Maven que demuestre el problema y la solución de Spring Framework emite github:

https://github.com/SpringSource/spring-framework-issues

Busque el número del problema, SPR-6428, en los proyectos descargados.

Por mi parte, jugando con PropertyPlaceholderConfigurer ambas propiedades:

  • orden (debe ser menor para el PPC primero consultado / analizado)
  • ignoreUnresolvablePlaceholders (“falso” para el PPC primero consultado / analizado, “verdadero” para el siguiente)

  • y también otorgar 2 identificaciones distintas a ambos PPC (para evitar que uno sea sobrescrito por el otro)

funciona perfectamente

Espero eso ayude

Tenemos el siguiente enfoque funcionando:

  DEV localhost   

La propiedad del sistema app.properties.path se puede utilizar para anular la ruta al archivo de configuración.

Y la aplicación incluye algunos valores predeterminados para marcadores de posición que no se pueden definir con los valores predeterminados en los módulos comunes.

Solo dándome 2 identificadores distintos funcionó para mí. Estoy usando la spring 3.0.4.

Espero que ayude.

En el caso, necesita definir dos PPC (como en mi situación) y usarlos de forma independiente. Al establecer la propiedad placeholderPrefix , puede recuperar valores del PPC deseado. Esto será útil cuando ambos conjuntos de propiedades de PPC tengan las mismas claves, y si no lo usa, la propiedad de ppc2 anulará ppc1.

Definiendo tu xml:

         

Recuperando durante el tiempo de ejecución:

 @Value(value = "$prefix1-{name}") private String myPropValue1; @Value(value = "$prefix2-{name}") private String myPropValue2;