当前位置: 首页 > news >正文

知名网站建设制作阳江招聘网最新招聘2023

知名网站建设制作,阳江招聘网最新招聘2023,微信小程序管理平台入口,企业网站策划书1000字在线程池中#xff0c;子线程调用其他服务#xff0c;请求头丢失#xff0c;token为空的情况 看了很多篇文章的处理方法和在自己亲测的情况下做出说明#xff1a; 第一种#xff1a; 这种方式只支持在主线程情况下#xff0c;能够处理#xff0c;在多线程情况下#…在线程池中子线程调用其他服务请求头丢失token为空的情况 看了很多篇文章的处理方法和在自己亲测的情况下做出说明 第一种 这种方式只支持在主线程情况下能够处理在多线程情况下一旦主线程结束这里还是会为空 第二种 //请求属性可继承线程共享 RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(),true);这种经测试后发现主线程直接启动子线程且执行完自己逻辑后便结束不需理会子线程结果的请求偶尔成功 偶尔失败 也就是当父线程比子线程执行完慢时请求属性还在子线程请求成功当快时请求属性随着父线程结束而销毁子线程的请求属性变为null请求失败。 第三种 采用的处理方式为ThreadLocal 新建一个ThreadLocal 工具类在多线程请求前获取到需要的属性值或者设置所有的属性值放入工具类MAP种进行存储在子线程调用服务时通过监听处将需要的值取出就可以解决了。实际如下 public class ThreadLocalUtil {//使用InheritableThreadLocal使得共享变量可被子线程继承private static final InheritableThreadLocalMapString,String headerMap new InheritableThreadLocalMapString, String(){Overrideprotected MapString, String initialValue() {return new HashMap();}};public static MapString,String get(){return headerMap.get();}public static String get(String key) {return headerMap.get().get(key);}public static void set(String key, String value){headerMap.get().put(key,value);} } 在线程执行前加 1 EnumerationString headerNames servletRequest.getHeaderNames();while (headerNames.hasMoreElements()){String name headerNames.nextElement();if (Objects.equals(name,feignheader)){ThreadLocalUtil.set(name,servletRequest.getHeader(name));}}或者直接获取token在需要的地方再进行赋值。 2 RequestAttributes requestAttributes RequestContextHolder.getRequestAttributes(); ServletRequestAttributes srat (ServletRequestAttributes) requestAttributes; HttpServletRequest request srat.getRequest(); ThreadLocalUtil.set(token, request.getHeader(authorization));修改监听处获取请求头信息赋值 1 Slf4j Configuration public class FeignConfig implements RequestInterceptor {Overridepublic void apply(RequestTemplate requestTemplate) { // ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); // //当主线程的请求执行完毕后Servlet会被销毁因此在这里需要做判空 // if (attributes ! null) { // HttpServletRequest request attributes.getRequest(); // // EnumerationString headerNames request.getHeaderNames(); // // while (headerNames.hasMoreElements()) { // String name headerNames.nextElement(); // //不能把所有消息头都传递下去否则会引起其他异常header的name都是小写 // if (name.equals(feignheader)) { // requestTemplate.header(name,request.getHeader(name)); // } // } // }//读取设置的header信息传递到下一个服务MapString, String headerMap ThreadLocalUtil.get();for (String key : headerMap.keySet()) {log.info(--从ThreadLocal获取消息头传递到下一个服务key-[{}],value-[{}],key,headerMap.get(key));requestTemplate.header(key,headerMap.get(key));}} }2 这里之所以直接拿token是因为后面传递获取token未获取到的问题如果有其它信息丢失可用上面1 的方法会更全面一点 Slf4j Configuration public class FeignConfig implements RequestInterceptor {Overridepublic void apply(RequestTemplate requestTemplate) {ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();String token null;//当主线程的请求执行完毕后Servlet会被销毁因此在这里需要做判空if (attributes ! null) {ServletRequestAttributes srat (ServletRequestAttributes) requestAttributes;HttpServletRequest request srat.getRequest();token request.getHeader(authorization);}token StringUtils.isNotBlank(token) ? token : ThreadLocalUtil.get(token);//将token传递出去requestTemplate.header(authorization, token);} }
http://www.hkea.cn/news/14544652/

相关文章:

  • 网站一元空间有哪些呀帮忙建网站的人
  • 电子商务网站建设功能wordpress 变更域名
  • 修机械师怎么做我小样网站角仰望阿里云 企业 网站
  • 做网站需要学什么软件wordpress 文章调用
  • 本地网站怎么建设怎么申请小程序流程
  • sns社交网站三原网站开发
  • 网站建设 应酷wordpress关于
  • 网站开发就业培训班4399游戏官网
  • 做短视频的网站卖汽车的网站怎么做的吗
  • 晋江市住房与城乡建设局网站好看又免费的图片素材
  • 河北省建设厅网站备案网络网站建设10大指标
  • 江苏网站建设哪家有破解wordpress可见
  • jsp网站服务建设是什么株洲网站制作与设计
  • 电商网站 服务器网站开发与实现文献综述
  • 商务网站建设流程步骤东莞百度seo服务公司
  • 网站开发制作案例单纯做seo能否提升网站流量
  • 优秀的定制网站建设提供商wordpress 菜单
  • 烟台响应式网站建设vr技术对网站建设有哪些影响
  • 潍坊大型网站建设建网站点击率
  • 网站建设可行性报告模板网站二次备案
  • seo网站优化培训价格中文网站建设公司
  • redis做缓存的网站并发数免费看各大网站的软件
  • 黄石网站建设哪家好WordPress多语言多站点
  • 网站建设一年能收入多少钱wordpress 统计字数
  • 哪个网站可以找人做清洁wordpress小说站数据库
  • 网站备案 多久怎么建立自己的销售平台
  • 跨国网站怎么做建网站挣钱吗
  • 网站建设设计规范方案深圳消防公司排行
  • 购物网站后台管理系统做网站商城需要申请商标吗
  • wordpress退出代码seo 网站案例