春季启动ConfigurationProperties-使用比较器注入TreeMap

时间:2019-09-13 17:50:25

标签: java spring-boot

我在Spring Boot应用程序中具有以下配置属性:

@Configuration
@ConfigurationProperties(prefix = "test")
public class ConfigProperties {

    private Map<String, String> values = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

    public void setValues(Map<String, String> values) {
        this.values = values;
    }

我想以一个忽略按键大小写的Map结尾。

发生注入时,setValues方法将接收没有比较器的树形图。

我通过将设置器更改为此:

    public void setValues(Map<String, String> values) {
        this.values.clear();
        this.values.putAll(values );
    }

是否有适当的方法来做到这一点?我想念什么吗?

1 个答案:

答案 0 :(得分:1)

我认为您正在正确地进行操作,以使用自定义比较器将一个任意映射的所有条目复制到排序的TreeMap中。基本上,您只有两个选项:clear和putAll或创建一个新实例和putAll

但是,我不认为这应该由配置负责。您的预期订单可能会根据用途而具有一定的商业价值。因此,排序应在使用配置值的代码中进行。但是再次,请参见上面的两个选项。