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

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

userBucket.path=${HOME}/bucket

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


当前回答

1.Injecting a property with the @Value annotation is straightforward:
@Value( "${jdbc.url}" )
private String jdbcUrl;

2. we can obtain the value of a property using the Environment API

@Autowired
private Environment env;
...
dataSource.setUrl(env.getProperty("jdbc.url"));

其他回答

另一种在配置中找到键/值的方法。

...
import org.springframework.core.env.ConfigurableEnvironment;
...
@SpringBootApplication
public class MyApplication {

    @Autowired
    private ConfigurableEnvironment  myEnv;

...
  
    @EventListener(ApplicationReadyEvent.class)
    public void doSomethingAfterStartup() 
    throws Exception {
        
        LOG.info("myEnv (userBucket.path): " + myEnv.getProperty("userBucket.path"));
    }
} 

你也可以这样做....

@Component
@PropertySource("classpath:application.properties")
public class ConfigProperties {

    @Autowired
    private Environment env;

    public String getConfigValue(String configKey){
        return env.getProperty(configKey);
    }
}

然后无论你想从应用程序中读取什么。属性,只需将键传递给getConfigValue方法。

@Autowired
ConfigProperties configProp;

// Read server.port from app.prop
String portNumber = configProp.getConfigValue("server.port"); 

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

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

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

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

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

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 ();

我也有这个问题。但是有一个很简单的解决办法。只需要在构造函数中声明你的变量。

我的例子:

application.propperties:

#Session
session.timeout=15

SessionServiceImpl经济舱:

private final int SESSION_TIMEOUT;
private final SessionRepository sessionRepository;

@Autowired
public SessionServiceImpl(@Value("${session.timeout}") int sessionTimeout,
                          SessionRepository sessionRepository) {
    this.SESSION_TIMEOUT = sessionTimeout;
    this.sessionRepository = sessionRepository;
}