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);
}
}