使用Map绑定到@ConfigurationProperties不会保留键的顺序

时间:2018-04-14 14:13:22

标签: java spring-boot

我正在使用@ConfigurationProperties从属性文件中注入地图。以下是代码:

@ConfigurationProperties("product")
public class WebUtils {
private WebUtils() {
}

public static String getURLWithContextPath(HttpServletRequest request) {
    return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + request.getContextPath();
}

private static Map<String, String> solitaireProp = new LinkedHashMap<>();

public Map<String, String> getSolitaireProp() {
    return solitaireProp;
}

public static List<String> getSolitaireProperties(){
    List<String> solProp = new ArrayList<>();
    for(HashMap.Entry<String, String> entry : solitaireProp.entrySet()) {
        solProp.add(entry.getKey());
    }
    return solProp;
}}

代码工作正常,但它没有保留属性文件中的条目顺序,例如如果属性文件输入是:

product.solitaireProp.lab=lab
product.solitaireProp.certificateNo=certificate_number
product.solitaireProp.shape=shape

但是我的LinkedHashMap的条目与上面的顺序不一样。有谁知道如何维持秩序??

1 个答案:

答案 0 :(得分:0)

属性(有或没有Spring Boot)不是为了维护任何特定的顺序而设计的 如果维护订单很重要,请不要使用经典属性,而是使用您自己的方式读取文件并维护文件中元素的顺序。
作为替代方案,您可以重写加载属性的方式,但实际上这是一种负担,如果您使用Spring Boot功能来加载属性,那么您很少有可能覆盖加载处理。