[英]Spring Boot: Load @Value from YAML file
我需要從.yml
文件加載一個屬性,該文件包含應用程序可以從中讀取文件的文件夾的路徑。
我正在使用以下代碼注入屬性:
@Value("${files.upload.baseDir}")
private String pathToFileFolder;
用於開發的.yml
文件位於src/main/resources/config/application.yml
下,我在生產中使用以下命令運行應用程序,以覆蓋開發設置:
java -jar app.jar --spring.config.location=/path/to/application-production.yml
Spring 引導文檔說:
SpringApplication 將從以下位置的 application.properties 文件加載屬性,並將它們添加到 Spring 環境中:
當前目錄的 /config 子目錄。
當前目錄
類路徑 /config package
類路徑根
也:
您還可以使用 YAML ('.yml') 文件替代'.properties'。
.yml
文件包含:
{...}
files:
upload:
baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}
我的Application
class 注釋為:
@SpringBootApplication
@EnableCaching
當我運行應用程序時,出現異常:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"
我是否必須使用YamlPropertySourceLoader
class 或添加特殊注釋以在 Spring Boot 中啟用對.yml
的支持?
編輯: .yml
文件包含一些其他屬性,這些屬性由 Spring Boot 成功加載,如dataSource.XXX
或hibernate.XXX
。
例如:application.yml
key:
name: description here
你的班:
@Value("${key.name}")
private String abc;
M. Deinum 是對的,我提供的設置正在運行 - yml
文件縮進錯誤,因此無法找到該屬性。
我發現上面的方法對我不起作用,因為我試圖在構造函數中訪問變量。 但是在構建時,尚未注入該值。 最終我使用這個解決方法讓它工作: https : //mrhaki.blogspot.com/2015/04/spring-sweets-using-value-for.html
也許這對其他人有幫助。
對我來說,屬性文件中的重復鍵導致了這個......
我在大 yml 文件中不知不覺地使用了相同的密鑰。
key:
key1: value
key2: value
key:
key3: value
在 yml 屬性文件中:
xxxx:
page:
rowSize: 1000
創建您的 Yaml 屬性配置類:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "xxxx")
public class YmlPropertiesConfig {
private Page page;
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
public class Page {
private Integer rowSize;
public Integer getRowSize() {
return rowSize;
}
public void setRowSize(Integer rowSize) {
this.rowSize = rowSize;
}
}
}
最后得到它並使用它:
public class XXXXController {
@Autowired
private YmlPropertiesConfig ymlProperties;
public String getIt(){
Integer pageRowSize = ymlProperties.getPage().getRowSize();
}
}
我遇到了這個問題Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder
原因我已經在properties.yaml中設置了測試spring引導配置文件。 運行沒有配置文件的應用程序時,Spring 找不到測試配置文件的屬性。
因此,從屬性或 yaml 中刪除 spring boot 配置文件或使用啟用的配置文件運行應用程序。
配置文件示例如下:
@Configuration
public class AppConfig {
@Value("${prop.foo}")
private String foo;
@Value("${prop.bar}")
private String bar;
@Bean
BeanExample beanExample() {
return new BeanExample(foo, bar);
}
}
對於那些對 @RestController 有疑問的人,我按如下方式進行:
@Autowired
@Value("${google.recaptcha}")
private String keyRecaptcha;
我的屬性文件被錯誤地命名為applcation.properties
,因為它是由 Spring 初始值設定項自動生成的。 但是我以 .yml 格式在那里添加了屬性,並且沒有檢索到相同的錯誤。
當我將文件重命名為application.yml
時,它開始工作了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.