我想访问应用程序中提供的值。属性,例如:

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

userBucket.path=${HOME}/bucket

我想访问userBucket。在Spring Boot应用程序的主程序中的路径。


当前回答

您可以使用@Value注释并访问您所使用的Spring bean中的属性

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

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

其他回答

对我来说,以上这些方法对我都没有直接作用。 我所做的是:

另外,我补充了@Rodrigo Villalba Zayas的回答 实现InitializingBean到类 并实现了该方法

@Override
public void afterPropertiesSet() {
    String path = env.getProperty("userBucket.path");
}

这看起来就像

import org.springframework.core.env.Environment;
public class xyz implements InitializingBean {

    @Autowired
    private Environment env;
    private String path;

    ....

    @Override
    public void afterPropertiesSet() {
        path = env.getProperty("userBucket.path");
    }

    public void method() {
        System.out.println("Path: " + path);
    }
}

有3种方法读取application.properties,

使用@Value, EnvironmentInterface和@ConfigurationProperties..

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

方式2:

@Autowired
private Environment environment;

String s = environment.getProperty("userBucket.path");

第三道:

@ConfigurationProperties("userbucket")
public class config {

private String path;
//getters setters

}

可以读取与getter和setter ..

参考资料-此处

属性中的@Value("${property-name}") 应用程序。属性 @配置或@组件。

我尝试的另一种方法是用下面的方式创建一个Utility类来读取属性

 protected PropertiesUtility () throws IOException {
    properties = new Properties();
    InputStream inputStream = 
   getClass().getClassLoader().getResourceAsStream("application.properties");
    properties.load(inputStream);
}

您可以使用静态方法来获取作为参数传递的键的值。

有两种方法,

你可以直接在类中使用@Value

    @Value("#{'${application yml field name}'}")
    public String ymlField;

OR

要使它干净,你可以清除@Configuration类,在那里你可以添加所有的@value

@Configuration
public class AppConfig {

    @Value("#{'${application yml field name}'}")
    public String ymlField;
}

您可以使用@Value从应用程序加载变量。如果你在一个地方使用这个值,那么@ConfigurationProperties是一个更好的方法,但是如果你需要一个更集中的方式来加载这些变量。

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

application.properties
custom-app.enable-mocks = false

@Value("${custom-app.enable-mocks}")
private boolean enableMocks;