java - multiple - spring jpa configuration yml
Haciendo referencia a configuration.properties fuera de.war (6)
Aquí hay una solución:
<context:property-placeholder
location="file:${catalina.home}/webapps/datasource.properties"
ignore-unresolvable="true"/>
Avíseme si hay algo mejor, por ejemplo, si puedo deshacerme de catalina home reference y hacerlo de alguna manera más general.
quiero desplegar una guerra y la guerra debería obtener algunas propiedades fuera de la guerra (digamos dónde está el archivo .war, ese mismo directorio).
En este momento esta es la mejor solución que he encontrado:
<context:property-placeholder location="file:${user.home}/configuration.properties" ignore-unresolvable="true"/>
pero esta solución me obliga a mantenerlo siempre en el directorio de inicio. Quiero que esté en el directorio tomcat webapps donde despliegue mi .war. Sólo estoy buscando una solución que implique un camino absoluto. Si la ruta relativa es absolutamente imposible, entonces consideraré una ruta absoluta.
gracias por adelantado.
Bastante tarde para esta fiesta, pero pensé que publicaría una respuesta porque esta pregunta surgió primero en Google para mí. No estoy seguro de si esto funcionó en el momento en que se hizo la pregunta, pero a partir de la primavera 3.1, puede hacer esto para usar una ruta absoluta:
<context:property-placeholder location="file:///etc/myApp/myApp.conf"/>
Tenga en cuenta que hay tres barras diagonales. Los dos primeros son para el protocolo: "archivo: //".
Paso 1: Definir propiedades:
<util:properties id="myProperties" location="file:some/Absolute/path" />
Paso 2: Utilízalo en tu aplicación. Ejemplo:
(1)
public ModelAndView doWhatever(@Value("#{myProperties[''some.outside.property'']}") String whatever) { ... }
O (2)
Properties props = appContext.getBean("myProperties", Properties.class);
Puede colocar el archivo de propiedades en la ruta de clase y simplemente especificar el nombre del archivo de propiedades. A través del código java, puedes hacerlo así.
Supongo que Spring también debería estar revisando el archivo de propiedades en el classpath. Puede intentar colocar el archivo de propiedades en la ruta de clase y mencionar solo el nombre del archivo.
Puede definir cualquier variable como parámetro de contexto en el context.xml de Tomcat y usarla en applicationContext.xml colocado dentro de war.
Por ejemplo, context.xml:
<Context>
<Parameter name="configlocation" value="/etc/application/my.properties" override="false"/>
</Context>
applicationContext.xml:
<beans ...>
<context:property-placeholder location="file:${configlocation}" ... />
</beans>
Una solución que puedo ofrecer es usar la propiedad del sistema para pasar la ruta al archivo de configuración.
Hay 2 niveles de propiedades:
- Propiedades del sistema Java enviadas utilizando el interruptor -D a JVM y extraídas por
System.getProperty()
- Las variables de entorno del sistema operativo que define en el nivel del sistema operativo y puede acceder utilizando
System.getenv()