我在spring spring服务中从application.yml加载自定义配置。
我已经通过bean类注释如下,
@Component
@ConfigurationProperties("app")
public class ContinentConfig {
private Map<String, List<Country>> continents = new HashMap<String, List<Country>>();
//get/set/tostring methods
}
我的自定义类国家/地区包含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,在application.yml中保留其他属性,如 server.port 。
continentconfig.yml 与我之前在application.yml中的内容相同。
我还在ContinentConfig类中添加了以下注释,
@Component
@ConfigurationProperties("app")
@EnableConfigurationProperties
@PropertySource(value="classpath:continentconfig.yml")
public class ContinentConfig {
}
在此更改之后,我发现配置未从 continentconfig.yml 加载到 ContinentConfig bean。
有人可以帮助解决问题。
答案 0 :(得分:1)
您无法做到这一点,您应该使用属性文件。
24.6.4 YAML缺点
无法通过@PropertySource注释加载YAML文件。所以 如果您需要以这种方式加载值,则需要使用a 属性文件。
您可以创建初始值设定项并使用telegram.paste <- function(...) {paste("START", "...", "STOP")}
。
答案 1 :(得分:0)
我相信通过外部化,您的意思是使用属性文件从github /或其他此类托管库中配置的文件中加载配置?您可以通过使用bootstrap.yml很好地做到这一点。这将从外部文件加载所有配置,并且还允许设置使用本地application.properties/application.yml
覆盖它们。春天: 应用: 名称: 云 : 配置: uri:
还请确保您的pom中有弹簧云以解决此问题,以防万一
<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将配置文件加载到类路径中,最重要的是,您可以使用上述配置