无法从 Spring Boot 应用程序中的自定义 yml 文件加载配置
Posted
技术标签:
【中文标题】无法从 Spring Boot 应用程序中的自定义 yml 文件加载配置【英文标题】:Cannot load config from custom yml file in spring boot application 【发布时间】:2017-11-16 08:30:55 【问题描述】:我正在从我的 Spring Boot 服务中的 application.yml 加载自定义配置。
我已经通过bean类注释如下,
@Component
@ConfigurationProperties("app")
public class ContinentConfig
private Map<String, List<Country>> continents = new HashMap<String, List<Country>>();
//get/set/tostring methods
我的自定义类 Country 包括 2 个字段,
public class Country
String name;
String capital;
//get/set/tostring methods
在 application.yml 我有如下,
app:
continents:
Europe:
- name: France
capital: Paris
Asia:
- name: China
capital: Beijing
通过上述设置,我可以从 application.yml 加载配置。
我现在想将配置提取到同一 src/main/resources 文件夹中的单独 continentconfig.yml 中。因此,我将自定义配置移到了continentconfig.yml,而将server.port 等其他属性留在了application.yml 中。
continentconfig.yml 的内容与我之前在 application.yml 中的内容相同。
我还在 ContinentConfig 类中添加了以下注释,
@Component
@ConfigurationProperties("app")
@EnableConfigurationProperties
@PropertySource(value="classpath:continentconfig.yml")
public class ContinentConfig
在此更改之后,我看到配置没有从 continentconfig.yml 加载到 ContinentConfig bean。
有人可以帮忙解决这个问题吗?
【问题讨论】:
在这里看看这个答案:https://***.com/questions/21271468/spring-propertysource-using-yaml/54247009#54247009 .它很容易使用。 【参考方案1】:简短的回答你不能这样做,你应该使用属性文件。
24.6.4 YAML 缺点
YAML 文件无法通过 @PropertySource 注解加载。所以在 如果您需要以这种方式加载值,则需要使用 属性文件。
您可以创建初始化程序并使用YamlPropertySourceLoader
。
【讨论】:
感谢您的澄清。但是,是否有另一种方法可以在它自己的 yml 文件中外部化自定义配置,也许将其用作特定于配置文件的 yml 文件。 您可以在application.yml
中拥有一个基本配置,并且您可以为所需的配置文件application-dev.yml
等覆盖它。使用YamlPropertySourceLoader
还有另一种解决方法。见***.com/questions/21271468/…【参考方案2】:
我相信外部化是指使用属性文件从 github/或其他此类托管存储库中配置的文件加载配置?您可以使用 bootstrap.yml 很好地做到这一点。这会从外部文件加载所有配置,并允许配置使用本地 application.properties/application.yml 覆盖它们
弹簧: 应用: 姓名: 云 : 配置: 网址:
还要确保你的 pom 中有 spring cloud 来解决这个问题,以防万一
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
如果您的本地 yml 属性文件未加载到类路径中,请添加以下内容
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.jks</include>
</includes>
</resource>
</resources>
注意:最好让 YamlPropertySourceLoader 将您的配置文件加载到您的类路径,除此之外,您还可以使用上述配置
【讨论】:
以上是关于无法从 Spring Boot 应用程序中的自定义 yml 文件加载配置的主要内容,如果未能解决你的问题,请参考以下文章
带有spring-boot的自定义sql中的Liquibase参数
无法在 Spring Boot Security 中登录到我的自定义登录页面