Quiero acceder a los valores proporcionados en application.properties
, por ejemplo:
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
Quiero acceder userBucket.path
en mi programa principal en una aplicación Spring Boot.
java
spring-boot
properties-file
Qasim
fuente
fuente
Environment
o vía@ConfigurationProperties
@Configuration
clases, el problema se analiza bien en la siguiente publicación de blog@Component
(o cualquiera de sus derivados, es decir@Repository
, etc.)Otra forma es inyectando
org.springframework.core.env.Environment
a su frijol.fuente
org.springframework.core.env.Environment
@ConfigurationProperties
se puede usar para asignar valores de.properties
(.yml
también compatibles) a un POJO.Considere el siguiente archivo de ejemplo.
.propiedades
Employee.java
Ahora se puede acceder al valor de las propiedades mediante el cableado automático de la
employeeProperties
siguiente manera.fuente
src/main/resources
si no está probando su código desde una prueba de Spring.Actualmente, conozco las siguientes tres formas:
1. La
@Value
anotaciónnull
. Por ejemplo, cuando intenta configurarlo en unpreConstruct()
método o uninit()
método. Esto sucede porque la inyección de valor ocurre después de que la clase está completamente construida. Es por eso que es mejor usar la tercera opción.2. La
@PropertySource
anotaciónPropertySouce
establece valores del archivo fuente de la propiedad en unaEnvironment
variable (en su clase) cuando se carga la clase. Así que puedes buscar fácilmente el epílogo.3. La
@ConfigurationProperties
anotación.Inicializa una entidad basada en datos de propiedad.
@ConfigurationProperties
identifica el archivo de propiedad para cargar.@Configuration
crea un bean basado en variables del archivo de configuración.fuente
spring.config.location
? ¿El # 2 todavía funciona?Puedes hacerlo de esta manera también ...
Luego, donde quiera leer desde application.properties, simplemente pase la clave al método getConfigValue.
fuente
Environment
?spring.config.location
?Puede usar el
@Value
para cargar variables desdeapplication.properties
si usará este valor en un lugar, pero si necesita una forma más centralizada de cargar estas variables@ConfigurationProperties
es un mejor enfoque.Además, puede cargar variables y emitirlas automáticamente si necesita diferentes tipos de datos para realizar sus validaciones y lógica de negocios.
fuente
sigue estos pasos. 1: - crea tu clase de configuración como a continuación puedes ver
2: - cuando tenga una clase de configuración, inyecte la variable desde una configuración donde la necesite.
fuente
fuente
Una aplicación puede leer 3 tipos de valor del archivo application.properties.
application.properties
archivo de clase
Si no tiene una propiedad en application.properties, puede usar el valor predeterminado
fuente
Spring-boot nos permite varios métodos para proporcionar configuraciones externalizadas, puede intentar usar los archivos application.yml o yaml en lugar del archivo de propiedades y proporcionar diferentes archivos de propiedades configurados de acuerdo a diferentes entornos.
Podemos separar las propiedades de cada entorno en archivos yml separados en perfiles de resorte separados. Luego, durante la implementación, puede usar:
para especificar qué perfil de resorte usar. Tenga en cuenta que los archivos yml deben tener un nombre como
para que sean automáticamente recogidos por springboot.
Referencia: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
Para leer desde el archivo application.yml o de propiedad:
La forma más fácil de leer un valor del archivo de propiedades o yml es usar la anotación spring @value. Spring carga automáticamente todos los valores desde el yml al entorno spring, por lo que podemos usar directamente esos valores del entorno como:
U otro método que proporciona spring para leer frijoles fuertemente tipados es el siguiente:
POJO correspondiente para leer el yml:
El método anterior funciona bien con archivos yml.
Referencia: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
fuente
Para mí, ninguno de los anteriores me funcionó directamente. Lo que hice es lo siguiente:
Además de @Rodrigo Villalba Zayas respondí allí agregué
implements InitializingBean
a la clasee implementé el método
Entonces eso se verá como
fuente
Se están utilizando las mejores formas de obtener valores de propiedad.
1. Usando la anotación de valor
2. Usando frijol ambiental
fuente
Lo mejor es usar la
@Value
anotación, asignará automáticamente valor a su objetoprivate Environment en
. Esto reducirá su código y será fácil filtrar sus archivos.fuente
Hay dos vías,
@Value
en tu claseO
@Configuration
clase donde puede agregar todos sus@value
fuente