我使用Spring 1.5.6引導和具有配置屬性如下:春季啓動 - 地圖財產的合併地圖
@Component
@Getter
@Setter
@ConfigurationProperties("test")
public class TestProperties {
private Map<Integer, Integer> map;
private Map<String, Map<Integer, Integer>> mapOfMaps;
}
和兩個YAML配置文件:
application.yml
test:
map:
1: 10
2: 20
mapOfMaps:
KEY1:
1: 10
2: 20
KEY2:
3: 30
4: 40
application-dev.yml
test:
map:
100: 100
mapOfMaps:
KEY1:
100: 100
當我用dev
配置文件運行我的應用程序時,我預計這兩個屬性將僅包含dev
配置文件值(因此基本上完全匹配application-dev.yml
)。
示例項目,請訪問:https://github.com/poznachowski/spring-boot-mapmerge
對於簡單map
屬性它工作得很好,但對於一個mapOfMaps
屬性解析到{KEY1={100=100}, KEY2={3=30, 4=40}}
。
這是否表現出設計?如果是的話,有沒有辦法讓我的工作方式我描述?
你在說什麼不對。以下是示例項目:https://github.com/poznachowski/spring-boot-mapmerge 當您使用dev配置文件運行它時,您將獲得我寫的內容: '以下配置文件處於活動狀態:dev'。 'map' - >'{100 = 100}''mapOfMaps' - >'{KEY1 = {100 = 100},KEY2 = {3 = 30,4 = 40}}' (並且在文檔中明確指出)。 –
我認爲你可能偶然發現了一個bug,Spring並沒有很好地處理數字鍵。我認爲它與[SPR-13398](https://jira.spring.io/browse/SPR-13398?jql=project%20%3D%20SPR%20AND%20text%20~%20%22yaml%22)有關)。我已更新您的示例以證明這一點:https://github.com/johannbre/spring-boot-mapmerge。只要將配置條目的鍵用引號引起來,代碼就會按預期運行。 –
另外,這也只發生在YAML配置中。我試過這個屬性文件,並且代碼的行爲與預期一樣,不需要用引號括住關鍵字。 –