tutorial starter start mvc español java spring spring-boot

java - starter - ¿Cómo anular application.properties durante la producción en Spring-Boot?



spring boot wikipedia (4)

ACTUALIZACIÓN: este es un error en primavera ver here

las propiedades de la aplicación fuera de su jar deben estar en uno de los siguientes lugares, entonces todo debería funcionar.

21.2 Application property files SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment: A /config subdir of the current directory. The current directory A classpath /config package The classpath root

así que, por ejemplo, esto debería funcionar, cuando no desea especificar los argumentos de la línea del cmd y no utiliza spring.config.location en su aplicación base.props:

d:/yourExecutable.jar d:/application.properties or d:/yourExecutable.jar d:/config/application.properties

ver el documento de configuración externa de Spring

Actualización: puede usar / @Configuration junto con / @PropertySource. de acuerdo con el documento here puede especificar recursos en cualquier lugar. solo debes tener cuidado, cuando se carga la configuración para asegurarte de que tu producción gana.

Estoy usando spring boot y application.properties para seleccionar una base de datos durante el desarrollo por @Configuration @Profile("dev") .

spring.profiles.active=dev spring.config.location=file:d:/application.properties

Durante la producción, me gustaría crear un archivo fuera del contexto de la aplicación que se debe cargar y luego activar un perfil de configuración diferente, con d: /application.properties:

spring.profiles.active=production

Resultado: cuando inicio la aplicación, la configuración sigue siendo dev , por lo que de alguna manera no se tiene en cuenta la ubicación adicional del archivo de propiedades productivas. ¿Me estoy perdiendo algo?

Spring boot 1.1.0.BUILD-SNAPSHOT

Nota: esta pregunta NO es sobre Tomcat .


No estoy seguro de que pueda cambiar dinámicamente los perfiles.

¿Por qué no tener un archivo de propiedades internas con la propiedad spring.config.location configurada en su ubicación externa deseada, y el archivo de propiedades en esa ubicación (fuera del contenedor ) tiene establecida la propiedad spring.profiles.active ?

Mejor aún, tenga un archivo interno de propiedades, específico para el perfil dev (tiene spring.profiles.active = dev) y déjelo así, y cuando desee implementar en producción, especifique una nueva ubicación para su archivo de propiedades, que tiene la primavera .profiles.active = prod:

java -jar myjar.jar --spring.config.location=D:/wherever/application.properties


Sé que preguntaste cómo hacer esto.

Pero la respuesta es, no deberías hacer esto.

Puede tener application.properties application-default.properties application-dev.properties, etc.

puede cambiar los perfiles por args de línea de comando al jvm

puede anular algunas cosas en el tiempo de prueba usando @TestPropertySource

Lo ideal es que todo esté en control de fuente para que no haya sorpresas. ¿Cómo sabe qué propiedades están ahí en la ubicación del servidor y cuáles faltan? ¿Qué sucede si los desarrolladores presentan cosas nuevas?

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

La bota de resorte ya te está dando suficientes maneras de hacerlo bien.


También puedes usar @PropertySources

@PropertySources({ @PropertySource(value = "classpath:application.properties"), @PropertySource(value = "file:/user/home/external.properties", ignoreResourceNotFound = true) }) public class Application { public static void main(String[] args) throws Exception { ConfigurableApplicationContext context = SpringApplication.run(Application.class, args); } }