首页 文章

如何访问Spring Boot中application.properties文件中定义的值

提问于
浏览
167

我想访问 application.properties 中提供的值,例如:

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log

userBucket.path=${HOME}/bucket

我想在Spring Boot应用程序中访问我的主程序中的 userBucket.path .

4 回答

  • 135

    如果您将在一个地方使用此值,则可以使用 @Valueapplication.properties 加载变量,但如果您需要更集中的方式来加载此变量 @ConfigurationProperties 是更好的方法 .

    此外,如果您需要不同的数据类型来执行验证和业务逻辑,您可以加载变量并自动转换它们 .

    application.properties
    custom-app.enable-mocks = false
    
    @Value("${custom-app.enable-mocks}")
    private boolean enableMocks;
    
  • 239

    另一种方法是向您的bean注入Environment .

    @Autowired
    private Environment env;
    ....
    
    public void method() {
        .....  
        String path = env.getProperty("userBucket.path");
        .....
    }
    
  • 11

    @ConfigurationProperties 可用于将 .properties (也支持 .yml )中的值映射到POJO .

    请考虑以下示例文件 .

    .properties

    cust.data.employee.name=Sachin
    cust.data.employee.dept=Cricket
    

    Employee.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
    }
    

    现在可以通过自动装配 employeeProperties 来访问属性值,如下所示 .

    @Autowired
    private Employee employeeProperties;
    
    public void method() {
    
       String employeeName = employeeProperties.getName();
       String employeeDept = employeeProperties.getDept();
    
    }
    
  • 1

    您可以使用 @Value 注释并在您正在使用的任何Spring bean中访问该属性

    @Value("${userBucket.path}")
    private String userBucketPath;
    

    Spring Boot文档的Externalized Configuration部分解释了您可能需要的所有细节 .

相关问题