![](/img/trans.png)
[英]How to assign annotation value from application.properties in Spring Boot?
[英]Spring Boot @Value annotation picks up key from application.properties, but does not use it at run time
@Value 的價值市場在運行時沒有通過。 我的代碼如下所示:
import com.example.MyClass;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
@Value("${api.key}")
private String apiKey;
@Bean
public MyClass getKey() {
return new MyClass(apiKey);
}
}
當我 hover 我的鼠標懸停在 IntelliJ 中的 ${api.key} 上時,它會顯示密鑰。 而且,如果我將 ${api.key} 替換為密鑰本身,則一切正常。 所以 IDE 知道 ${api.key} 是來自 application.properties 的鍵,但是在運行時,它不使用它,並且我收到 401 錯誤(因為該字段為空)。 即使我 go 到 application.properties 並在 api.key 上使用“查找用法”,它也會在代碼中顯示使用它的正確位置。
如果我運行 mvn spring-boot:run,一切都會像它應該的那樣完美執行,除了 api-key 是 null。 如果我將密鑰寫為字符串而不是使用@Value,它會讀取它並且一切都按預期工作。 盡管 Spring Boot 在其他所有方面都有效,但似乎集中在 @Value 未通過。
我已經用盡了我在網上找到的所有建議,但沒有任何效果。 很難列出我所做的所有嘗試,但我已經嘗試了我所看到的一切。 配置 pom、項目結構、運行配置、添加 @PropertySource、設置等。 我什至從頭開始創建了整個項目,以查看在我嘗試解決問題時是否有問題。
它識別屬性,運行 Spring,識別密鑰,但只是不使用它。
我遇到了類似的問題。 我發現您可以在 setter 上使用 @Value 注釋。 這應該有效:
private String apiKey;
@Value("${api.key}")
public String setApiKey(String apiKey) {
this.apiKey = apiKey;
}
我不能解釋為什么或如何工作,所以如果有人有任何進一步的解釋,請隨時編輯我的答案。
嘗試以下方法:
@Configuration
public class MyConfig {
@Bean
public MyClass getKey(@Value("${api.key}") String apiKey) {
return new MyClass(apiKey);
}
}
另一個(甚至更好)的選擇是使用配置屬性:
@ConfigurationProperties(prefix="api")
public class ApiConfigProperties {
private String key;
// getters, setters, no-op constructor
}
@Configuration
@EnableConfigurationProperties(ApiConfigProperties.class)
public class MyConfig {
@Bean
public MyClass getKey(ApiConfigProperties config) {
return new MyClass(config.getKey());
}
}
我通常更喜歡第二種方法,因為它允許(使用插件)生成 IDE 可以讀取並支持自動完成的“特殊” JSON 文件。 另一個好處是第二種方法很容易調試(在設置器中放置一個斷點 - 再簡單不過了)並允許在一個地方指定默認值。
至於問題中建議的選項,我通常將@Configuration
視為創建 bean 的 DSL,因此我不會在其上維護任何 state。 由於 Configuration 恰好是一個 spring bean,它允許自動布線,但這並不意味着您應該使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.