zoukankan      html  css  js  c++  java
  • 记一个由于依赖管理糟糕踩的坑

    • public void someMethod(long uid){
          set.add(uid);
          po.setString(JSON.toJSONString(set));
      } // 这段代码是web项目的,online会调用
      
    • someMethod(long)很简单,就是将存储uid的Set通过fastjson转成String咋一看没什么问题,但是在反序列化的时候,uid会默认为Integer这个时候就有问题了.所以需要改成JSON.toJSONString(set, SerializerFeature.WriteClassName)这样的String就是Set[1234567890L]那么反序列化也OK了

    • 改完之后本地确实没有问题,上线后web也没问题,但是online在反序列化的时候就报错了
      com.alibaba.fastjson.JSONException: exepct '[', but error查了半天,最后怀疑线上online的jar包有问题,联系运维查了下online的classpath,不出所料,当时内心十分日狗
      fastjson.jar

    • 这里又关系到class的加载问题,但是很明显online用的是1.1.2的版本,推测原因有二

      • 其一File#compareTo(File pathname)最后调用的还是String#CaseInsensitiveComparator#compare(String, String)
      • 其二由于该排序是linux默认的,所以classloader加载的时候会判断,如果已经加载过同包同类的class,则不加载后者
    • 综上所述,其实这个问题就是依赖管理糟糕的坑,至于为什么线上online会有两个fastjson,我也问了运维,历史原因.但是,如果是用maven管理的,应该会避免此类问题

  • 相关阅读:
    使用animate()完成修改图片src切换图片的动画效果
    一键分享到各个SNS插件
    $data[$i++]+=2;不等于$data[$i++]=$data[$i++]+2;
    QQ在线客服的使用
    JQuery实时监控文本框字符变化
    迭代器的使用
    泛型的作用
    Eclipse的使用
    关于“类型”字段的处理
    java servlet+mysql全过程(原创)
  • 原文地址:https://www.cnblogs.com/eahau/p/11003171.html
Copyright © 2011-2022 走看看