如何优雅地加载配置文件

这篇博客是记一次故障的总结。
故障的原因是发布完了修改配置文件的时候,配置属性转换类型失败,导致线上商品全部不展示。
故障部分关键代码:

if (StringUtils.isNumeric(value)) {
    confMap.put(key, Integer.valueOf(value))
}

配置的时候value没有配,传入了一个空串"",然后StringUtils.isNumeric没有进行数字校验,导致Integer.valueOf(value)的时候报错。

public static boolean isNumeric(String str) {
        if (str == null) {
            return false;
        } else {
            int sz = str.length();
			// 空串长度为0,不进行校验
            for(int i = 0; i < sz; ++i) {
                if (!Character.isDigit(str.charAt(i))) {
                    return false;
                }
            }

            return true;
        }
    }
    

经过这次教训,我们的优化方案是加载配置文件的时候把需要转换类型的属性直接进行转换,存到内存中,这样即使配置错误,一样可以使用原来的配置文件:

    public static void onChange(Map<String, String> conf) {
        try {
            Map<String, Integer> temp = Maps.newHashMap();
            for (Map.Entry<String, String> entry : conf.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                if (StringUtils.isNotEmpty(value) && StringUtils.isNumeric(value)) {
                    temp.put(key, Integer.valueOf(value));
                } else {
                    throw new IllegalArgumentException(String.format("属性配置错误,key=%s,value=%s", entry.getKey(), entry.getValue()));
                }
            }
            configMap = temp;
        } catch (Exception e) {
            log.error("加载配置文件失败", e);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值