Cómo acceder a un valor definido en el archivo application.properties en Spring Boot
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
a mi programa principal en una aplicación Spring Boot.
Puede usar la @Value
anotación y acceder a la propiedad en cualquier Spring Bean que esté usando.
@Value("${userBucket.path}")
private String userBucketPath;
La sección Configuración externa de los documentos de Spring Boot explica todos los detalles que pueda necesitar.
Otra forma es inyectarle org.springframework.core.env.Environment
al frijol.
@Autowired
private Environment env;
....
public void method() {
.....
String path = env.getProperty("userBucket.path");
.....
}
@ConfigurationProperties
se puede utilizar para asignar valores desde .properties
( .yml
también admitido) a un POJO.
Considere el siguiente archivo de ejemplo.
.propiedades
cust.data.employee.name=Sachin
cust.data.employee.dept=Cricket
Empleado.java
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "cust.data.employee")
@Configuration("employeeProperties")
public class Employee {
private String name;
private String dept;
//Getters and Setters go here
}
Ahora se puede acceder al valor de las propiedades mediante cableado automático employeeProperties
de la siguiente manera.
@Autowired
private Employee employeeProperties;
public void method() {
String employeeName = employeeProperties.getName();
String employeeDept = employeeProperties.getDept();
}
Actualmente, conozco las siguientes tres formas:
1. La @Value
anotación
@Value("${<property.name>}")
private static final <datatype> PROPERTY_NAME;
- En mi experiencia, hay algunas situaciones en las que no puedes obtener el valor o está configurado en
null
. Por ejemplo, cuando intentas 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. Por eso es mejor utilizar la tercera opción.
2. La @PropertySource
anotación
@PropertySource("classpath:application.properties")
// 'env' is an Environment variable
env.getProperty(configKey);
PropertySouce
establece valores del archivo fuente de propiedades en unaEnvironment
variable (en su clase) cuando se carga la clase. Para que pueda buscar fácilmente el epílogo.- Accesible a través de la variable de entorno del sistema.
3. La @ConfigurationProperties
anotación.
Esto se usa principalmente en proyectos Spring para cargar propiedades de configuración.
Inicializa una entidad basada en datos de propiedad.
@ConfigurationProperties
identifica el archivo de propiedades que se va a cargar.@Configuration
Crea un bean basado en las variables del archivo de configuración.@ConfigurationProperties(prefijo = "usuario") @Configuración("Datos de usuario") usuario de clase { // Propiedad y su captador/definidor } @autocableado datos de usuario privados datos de usuario; userData.getPropertyName();