从 application.yml 加载对数组
Posted
技术标签:
【中文标题】从 application.yml 加载对数组【英文标题】:Load array of pairs from application.yml 【发布时间】:2022-01-13 08:28:21 【问题描述】:任务是从 application.yml 文件中填充对列表。 所以在我的 kotlin 代码中,我有这样的东西:
@Component
class LocalImageStore(
@Value("\$images.thumbnails_sizes")
private val thumbnailsSizes: List<Pair<Int, Int>>
) : ImageStore
// unrelated code here
在application.yml
文件中我有以下内容:
images:
dir:
path: images
thumbnails_sizes:
- [150, 150]
- [200, 200]
- [400, 450]
所以我希望我的 thumbnailsSizes
将包含 .yml 文件中的对列表,但我看到的只是错误消息 Could not resolve placeholder 'images.thumbnails_sizes' in value "$images.thumbnails_sizes"n
我没有找到在 .yml 文件中存储对列表的方法,因此请告知如何以正确的方式进行。
【问题讨论】:
【参考方案1】:尝试以下方法:
images:
dir:
path: images
thumbnails_sizes:
- 150: 150
- 200: 200
- 400: 450
或者
images:
dir:
path: images
thumbnails_sizes:
- 150: 150
- 200: 200
- 400: 450
直接使用配置类而不是@Value
。假设您有以下这些属性的类:
@ConstructorBinding
@ConfigurationProperties(prefix = "images")
class ImagesConfiguration(@field:NestedConfigurationProperty val thumbnailsSizes: List<ThumbnailSize>)
data class ThumbnailSize(val width: Int, val height: Int)
您将LocalImageStore
更改为以下内容:
@Component
class LocalImageStore(private val imagesConfiguration: ImagesConfiguration) : ImageStore
// just use imagesConfiguration.thumbnailsSizes were needed
// unrelated code here
您可以在 YAML 中轻松配置,如下所示:
images:
dir:
path: images
thumbnails-sizes:
- width: 150
height: 150
- width: 200
height: 200
- width: 400
height: 450
【讨论】:
据我了解,yaml 文件应该以 key: value 格式存储对?在我的情况下,它不像 key: value,它更像["width": 150, "height": 150], ["width": 200, "height": 200], ["width": 400, "height": 450]
。然后我应该创建用于存储宽高对的类并以某种方式从 .yml 文件中解析 json 数组吗?
用一个类来做会更容易,更易读。
我已经编辑了我的答案,请检查一下;)
仍然看到错误:Could not resolve placeholder 'images.thumbnails_sizes' in value "$images.thumbnails_sizes"
正如我的回答所暗示的那样,您不能自动连接 ThumbnailSize
或 List<ThumbnailSize>
,而是 ImagesConfiguration
在 LocalImageStore
中。您可能需要将@ConfigurationPropertiesScan
添加到您的主类(带有@SpringBootApplication
的类)。试一试,让我知道结果;)以上是关于从 application.yml 加载对数组的主要内容,如果未能解决你的问题,请参考以下文章
Grails - grails-spring-security-rest - 无法从 application.yml 加载 jwt 机密
当您尝试对其运行 JUnit 测试时,不会为独立应用程序加载来自“application.yml”的属性
从application.yml/java、spring中读取应用变量(assoc数组)