Cómo acceder a un valor definido en el archivo application.properties en Spring Boot

Resuelto Qasim asked hace 9 años • 31 respuestas

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.patha mi programa principal en una aplicación Spring Boot.

Qasim avatar May 29 '15 18:05 Qasim
Aceptado

Puede usar la @Valueanotació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.

Master Slave avatar May 29 '2015 11:05 Master Slave

Otra forma es inyectarle org.springframework.core.env.Environmental frijol.

@Autowired
private Environment env;
....

public void method() {
    .....  
    String path = env.getProperty("userBucket.path");
    .....
}
Rodrigo Villalba Zayas avatar Jul 11 '2016 19:07 Rodrigo Villalba Zayas

@ConfigurationPropertiesse puede utilizar para asignar valores desde .properties( .ymltambié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 employeePropertiesde la siguiente manera.

@Autowired
private Employee employeeProperties;

public void method() {

   String employeeName = employeeProperties.getName();
   String employeeDept = employeeProperties.getDept();

}
J-J avatar Nov 08 '2017 11:11 J-J

Actualmente, conozco las siguientes tres formas:

1. La @Valueanotació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 un preConstruct()método o un init()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 @PropertySourceanotación

@PropertySource("classpath:application.properties")

// 'env' is an Environment variable
env.getProperty(configKey);
  • PropertySouceestablece valores del archivo fuente de propiedades en una Environmentvariable (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 @ConfigurationPropertiesanotación.

  • Esto se usa principalmente en proyectos Spring para cargar propiedades de configuración.

  • Inicializa una entidad basada en datos de propiedad.

  • @ConfigurationPropertiesidentifica el archivo de propiedades que se va a cargar.

  • @ConfigurationCrea 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();
Dhwanil Patel avatar Sep 25 '2019 11:09 Dhwanil Patel