![](/img/trans.png)
[英]springboot @ConfigurationProperties list reload not work
[英]SpringBoot 2.6.3 not binding @ConfigurationProperties on List of Objects
我知道這一定很簡單,而且我已經看到多個類似的問題,但是我的整個設置似乎沒問題(在其他帖子中已解決),但這個問題仍然存在。
這是我的設置
環境
2.6.3
17
應用.yml
platforms:
configs:
- platform: ABC
base-url: https://some-url-01.com/api
description:
logo:
- platform: DEF
base-url: https://some-url-02.com/api
description:
logo:
配置屬性
@Data
@ConstructorBinding
@ConfigurationProperties(prefix = "platforms")
public class PlatformProperties {
private final List<PlatformConfig> configs = new ArrayList<>();
@Data
public static class PlatformConfig {
private final Platform platform;
private final String baseUrl;
private final String description;
private final String logo;
}
}
Platform.java - 一個簡單的枚舉
public enum Platform {
ABC, DEF
}
配置
@Slf4j
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(PlatformProperties.class)
public class ClientConfig {
private final PlatformProperties platformProperties;
@PostConstruct
public void showProperties(){
platformProperties.getConfigs().forEach(System.out::println);
}
}
整個設置看起來非常好(參考: Spring Docs ),但是platformProperties.getConfigs()
總是空的,因為在application.yml
中定義的platforms.configs
上沒有綁定
我在另一個項目 ( springboot 2.5.7
/ Java 8
) 上有類似的設置,一切都按預期工作。
這個設置/配置有什么問題???
嗯,我早就解決了這個問題,只是想提供答案,而且也很簡單。
你看到這條線了嗎?
private final List<PlatformConfig> configs = new ArrayList<>();
那是罪魁禍首。
請注意, configs
變量是最終變量,並且已經為其值分配了一個new ArrayList<>()
,因此它是不可變的。
解決方案是刪除初始分配,因此該行變為;
private final List<PlatformConfig> configs;
構造函數綁定正常, configs
值按預期填充。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.