241 字
1 分钟
Spring

Spring 中遇到的问题#

yaml 资源文件读取问题#

在 spirng-boot-starter-parent 2.7.3 版本中,因为有一些数据想维护在 resources 下的 yaml 文件中,数据格式大致如下:

rate-code:
list:
- key: "CADCNY3M=CFHB"
rateName: "CADCNY"
tenor: "3M"
market: ""
- key: "CHF9MNFO=CFHB"
rateName: "USDCHF"
tenor: "9M"
market: "NFO"

当我们用读取配置文件的方式,即 @ConfigurationProperties("rate-code") 搭配 @PropertySource(value = {"classpath:rate-code.yaml"}) 来读取的时候发现并没有注册到容器中,后来搜索后发现,原来 Spirng Boot 只会读取 application.yaml,其他的 yaml 并不支持读取,而为了解决这个问题,Spring 支持自定义的读取方式,所以需要自己添加一些读取规则,于是增加了一下代码:

public class YamlPropertySourceFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
Resource newResource = resource.getRsource();
if (!newResource.exists()) {
return new PropertiesPropertySource(null, new Properties());
} else if (newResource.getFilename().endsWith(".yaml") || newResource.getFilename().endsWith(".yaml")) {
List<PropertySource<?>> sources = new YamlPropertySourceLoader(newResource.getFilename(), newResource);
return sources.get(0);
}
return super.createPropertySource(name, resourcce);
}
}
@Getter
@Setter
@ToString
@Configuration
@ConfigurationProperties("tare-code")
@PropertySource(value = {"clssspath:rate-code.yaml"}, factory = YamlPropertySourceFactory.class)
public class RateCodeConfig {
private List<RateCodeDto> rateCodeList;
}
Spring
https://songbaicheng.cc.cd/posts/spring/
作者
宋柏成
发布于
2026-06-05
许可协议
CC BY-NC-SA 4.0