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

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

userBucket.path=${HOME}/bucket

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


当前回答

有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 ..

参考资料-此处

其他回答

也许它可以帮助其他人: 你应该注入@Autowired私有环境env;from import org.springframework.core. environment;

然后这样使用它: env.getProperty(“yourPropertyNameInApplication.properties”)

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

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

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

实际上有三种方法来读取应用程序。属性文件,

使用环境,

@Autowired
Environment environment

environment.getProperty({propertyName})

或者使用@Value,

@Value("${property}")

但是@Value的问题是,如果值不在属性文件中,它可能会抛出异常

建议使用@ConfigurationProperties

@ConfigurationProperties("userBucket")
public class test{
  private String path;
  //getters and setters
}

详细示例-读取application.properties

应用程序。Yml或application.properties

config.value1: 10
config.value2: 20
config.str: This is a simle str

MyConfig类

@Configuration
@ConfigurationProperties(prefix = "config")
public class MyConfig {
    int value1;
    int value2;
    String str;

    public int getValue1() {
        return value1;
    }

    // Add the rest of getters here...      
    // Values are already mapped in this class. You can access them via getters.
}

任何想要访问配置值的类

@Import(MyConfig.class)
class MyClass {
    private MyConfig myConfig;

    @Autowired
    public MyClass(MyConfig myConfig) {
        this.myConfig = myConfig;
        System.out.println( myConfig.getValue1() );
    }
}

目前, 我知道以下三种方法:

1. @Value注释

    @Value("${<property.name>}")
    private static final <datatype> PROPERTY_NAME;

根据我的经验,有些情况下你并不是 能够获取该值或将其设置为null。 例如, 当你尝试在preConstruct()方法或init()方法中设置它时。 这是因为值注入发生在类完全构造之后。 这就是为什么最好使用3'选项的原因。

2. @PropertySource注释

@PropertySource("classpath:application.properties")

//env is an Environment variable
env.getProperty(configKey);

当装入类时,PropertySouce从环境变量中的属性源文件(在您的类中)设置值。 所以你可以很容易地获取后记。 可通过系统环境变量访问。

3.@ConfigurationProperties注释。

这主要用于Spring项目中加载配置属性。 它根据属性数据初始化实体。 @ConfigurationProperties标识要加载的属性文件。 @Configuration基于配置文件变量创建bean。 @ConfigurationProperties(prefix = "user") @ configuration(“用户数据”) 类用户{ //属性及其getter / setter } @ autowired private UserData; userData.getPropertyName ();