• 好文,顶起

  • 是啊,谁让你不来,- -

  • 现在spring有些框架默认是不开启长连接的,开发需要代码上额外处理下

  • header请求的connection是不是设置成keep-live?
    参考文章:https://blog.csdn.net/zhaohongyan6/article/details/70841456

  • HeroTestly 框架设计 at April 08, 2019

    😁😁😁我就是想减少一个入参处理,用threadlocal比较多,尤其在自定义注解这块;支付业务我是看我们服务实现处理,😄,用的比较漂亮

  • HeroTestly 框架设计 at April 08, 2019

    哈哈,果果,从你的回答就看到你确实没体会其中妙处,全局map定义这种尤其还不是静态变量,在编程规范是尽量避免的,threadloal等于在本次业务请求处理中,是个全局临时变量,线程执行完成,自动销毁threadlocal,这个在支付业务中,有很广的应用,可以作为订单处理异常的时候,资金解冻等相关处理

  • HeroTestly 框架设计 at April 08, 2019

    😀 😀 已经在应用了,给你段处理代码给你看下,拿来即用

    public class DynamicLocalHolder {

    public static final ThreadLocal<Map<String,Object>> hodler = new ThreadLocal<>();


    public static Map<String,Object> get(){
    return hodler.get();
    }

    public static void set(Map<String,Object> map){
    hodler.set(map);
    }

    public static void set(String key,Object value){
    Map<String,Object> map = hodler.get();
    if(map == null){
    map = Maps.newHashMap();
    }

    map.put(key,value);
    set(map);
    }

    public static void clean(){
    hodler.remove();
    }

    }

    前一个接口设置值:

    if(CollectionUtils.isNotEmpty(teacherQAResponseList)){
    DynamicLocalHolder.set("teacherQAResponseList",teacherQAResponseList);
    }

    后一个接口获取值:

    /**
    * 设置讲师问答
    */

    private void setTeacherQA(CreateCourseItemRequest createCourseItemRequest){
    if(DynamicLocalHolder.get().containsKey("teacherQAResponseList")){
    List<TeacherQAResponse> teacherQAResponseList = (List<TeacherQAResponse>) DynamicLocalHolder.get().get("teacherQAResponseList");
    List<TeacherQARequest> teacherQARequestList = Lists.transform(teacherQAResponseList, new Function<TeacherQAResponse, TeacherQARequest>() {
    @Override
    public TeacherQARequest apply(TeacherQAResponse teacherQAResponse) {
    TeacherQARequest teacherQARequest = new TeacherQARequest();
    BeanUtils.copyProperties(teacherQAResponse,teacherQARequest);
    return teacherQARequest;
    }
    });
    createCourseItemRequest.setTeacherQAList(teacherQARequestList);
    }
    }
  • charles修改响应结果,设置响应结果中想测试的字段设置为null即可;一般而言,客户端这边不会对所有用到的字段做判空处理,所以一旦为空出现crash的情况比较大,最好还是要规范服务端童鞋的编码规范,返回为空的时候返回默认值例如

    List<String> stringList = null;
    stringList = (CollectionUtils.isEmpty(stringList))? Lists.newArrayList():stringList;
  • 有意思,有时间再看看

  • 猜测只是打印出神策相关日志。根据打点要求,肉眼比对

骑驴找马~现在的状态