我想從環境變量綁定屬性到地圖。如果在application.properties
中定義了一個屬性,則綁定可以正常工作。但是如果該屬性被定義爲ENV變量綁定失敗。如何使用Spring引導自變量變量自定義屬性綁定
考慮下面的例子:
@ConfigurationProperties("com.test")
public class Props {
private Map<String, Map<String, String>> property;
}
以下ENV變量有望被映射爲一個地圖[property={foo={bar=VALUE}}]
。
export COM_TEST_PROPERTY_FOO_BAR=VALUE
但結合故障
Failed to convert property value of type 'java.lang.String' to required type 'java.util.Map' for property 'property[FOO_BAR]'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.Map' for property 'property[FOO_BAR]': no matching editors or conversion strategy found
基於documentation我還試圖創建一個自定義Converter
和使用@ConfigurationPropertiesBinding
註冊,但這種做法我不能夠訪問鍵,只是價值觀。
我還試圖註冊自定義PropertyEditor
,但看起來是沒有得到註冊,也許應該以不同的方式註冊?
@Bean
@ConfigurationPropertiesBinding
public CustomEditorConfigurer customEditorConfigurer() {
CustomEditorConfigurer pe = new CustomEditorConfigurer();
pe.setCustomEditors(Collections.singletonMap(Map.class, KeyPropertyEditor.class));
return pe;
}
你可以嘗試一下用這個Demo app
編輯1 我提出an issue
編輯2
它將被固定在Spring Boot 2中
啊,我誤解了,你想在一個單一的環境變量中導入一個完整的命名空間屬性?我不認爲這是可能的。 –