开发辅助一(网关gateway+ThreadLocal封装用户信息+远程调用+读取配置文件+统一异常处理)

网关gateway模块

①、配置文件,添加各个服务模块的路由路径

gateway:routes:-id: server-cart #微服务名称uri: lb://service-cart  #负责均衡predicates:- Path=/api/order/cart/**

ThreadLocal

①、定义一个工具类

public class AuthContextUtil{private static final ThreadLocal<SysUser> threadLocal = new ThreadLocal<>();//存储数据public static void set(SysUser sysUser){threadLocal.set(sysUser);}//获取数据public static SysUser get(){return threadLocal.get();} //删除数据public static void remove(){threadLocal.remove();}
}

②、业务方法中使用

@GetMapping(value="/getUserInfo")
public Result getUserInfo(){return Result.build(AuthConextUtil.get(),ResultCodeEnum.SUCCESS); //从ThreadLocal中获取用户信息
}

远程调用

购物车服务模块——>商品服务模块中的数据
在这里插入图片描述

①、service-client模块将调用接口单独剥离出来作为调用接口端

添加依赖:spring-cloud-starter-openfeign spring-cloud-loadbalancer

创建远程调用接口

@FeignClient(value="service-product") //value的值和service-product模块中配置文件服务名称一致
public interface ProductFeignClient{@GetMapping("/api/product/getBySkuId/{skuId}")public ProductSku getBySkuId(@PathVariable("skuId") Long skuId);
}

②、service-cart模块中引入service-client模块坐标

启动类上添加注解

@EnableFeignClients(basePackages = {"com.michael.spzx"})
@EnableUserLoginAuthInterceptor //该注解是针对ThreadLocal存入的用户信息
@Autowired
private ProductFeignClient productFeignClient;//将接口进行注入//方法中,调用即可

③、service-product模块服务提供

service/mapper省略

@GetMapping("/getbySkuId/{skuId}")
public ProductSku getBySkuId(@PathVariable Long skuId){ProductSku productSku = productService.getBySkuId(skuId);return productSku;
}

读取配置文件

①、配置文件

配置文件的相互导入

application-alipay.yml

spzx:applipay:  #值省略allipay_url: app_id: app_private_key: return_payment_url:notify_payment_url:

application-dev.yml中进行引入

spring:config:import: application-alipay.yml

②、定义实体类读取配置文件

@Data
@ConfigurationProperties(prefix="apzx.alipay")
public class AlipayProperties{private String alipayUrl; //属性名和配置文件中的保持一致private String appPrivateKey;public String alipayPublicKey;private String appId;public String returnPaymentUrl;public String notifyPaymentUrl;public final static String format="json";public final static String charset="utf-8";public final static String sign_type="RSA2"
}

③、启动类添加注解

@EnableConfigurationProperties(value={AlipayProperties.class})

统一异常

①、创建异常定义

@ControllerAdvice //给Controller增加一个统一操作
public class GlobalExceptionHandler{//全局异常处理@ExceptionHandler(Exception.class)@ResponseBodypublic Result error(){return Result.build(null,ResultCodeEnum,SYSTEM_ERROR);}//引入自定义异常@ExceptionHandler(GuiGuException.class)@ResponseBodypublic Result error(GuiguException e){return Result.build(null,e.getResultCodeEnum());}
}
/**自定义异常
*/
@Data
public class GuiguException extends RuntimeException{private Integer code;private String message;private ResultCodeEnum resultCodeEnum; //枚举类封装的错误状态码和错误信息public GuiguExcetion(ResultCodeEnum resultCodeEnum){this.resultCodeEnum = resultCodeEnum;this.code = resultCodeEnum.getCode;this.message = resultCodeEnum.getMessage();}public GuiguExcetion(Integer code,String message){this.code = code;this.message = message;}
}

②、Service业务类使用

if(sysUser == null){//throw new RuntimeException("用户名或密码错误");//改成自定义异常throw new GuiguException(ResultCodeEnum.LOGIN_ERROR);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/224787.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-k8s知识点7-kubernetes升级

文章目录 验证新版本有没有问题需要安装的版本微微 1.20.6.0kubeadm upgrade plan 验证新版本有没有问题 查看可用版本的包 现有的状态 查看版本 yum list kubeadm --showduplicates |grep 1.20 yum list kubelet --showduplicates |grep 1.20 yum list kubectl --showduplic…

基于机器学习算法的数据分析师薪资预测模型优化研究(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Docker容器的可视化管理工具—DockerUI本地部署与远程访问

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

【easy-ES使用】1.基础操作:增删改查、批量操作、分词查询、聚合处理。

easy-es、elasticsearch、分词器 与springboot 结合的代码我这里就不放了&#xff0c;我这里直接是使用代码。 基础准备&#xff1a; 创建实体类&#xff1a; Data // 索引名 IndexName("test_jc") public class TestJcES {// id注解IndexId(type IdType.CUSTOMI…

云上安全责任共担模型

对于传统自建物理服务器模式&#xff0c;用户需要承担所有的安全责任&#xff0c;负责从物理基础设施到上层应用的所有层面的安全体系构建。 云服务器的安全责任确实与物理服务器不同&#xff0c;云上的安全性是一种责任共担模式&#xff0c;其中云服务器ECS的安全责任需要你&…

关于“Python”的核心知识点整理大全39

目录 ​编辑 14.1.5 将 Play 按钮切换到非活动状态 game_functions.py 14.1.6 隐藏光标 game_functions.py game_functions.py 14.2 提高等级 14.2.1 修改速度设置 settings.py settings.py settings.py game_functions.py 14.2.2 重置速度 game_functions.py 1…

uniapp智能工具助手(附送250套精选微信小程序源码)

前言 现在的微信小程序非常火爆&#xff0c;网上也有很多学习资源&#xff0c;但是源码资源还是很少的。其实在学习开发微信小程序的时候如果有源码可以供我们借鉴&#xff0c;学习效率也会成倍的增加。 搭建或者想要基于某个小程序框架做二次开发 这里已收集整理好, 类目涵盖…

【MATLAB】PSO粒子群优化LSTM(PSO_LSTM)的时间序列预测

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 PSO粒子群优化LSTM&#xff08;PSO-LSTM&#xff09;是一种将粒子群优化算法&#xff08;PSO&#xff09;与长短期记忆神经网络&#xff08;LSTM&#xff09;相结合的混合模型。该算法通过…

【深度学习-目标检测】01 - R-CNN 论文学习与总结

论文地址&#xff1a;Rich feature hierarchies for accurate object detection and semantic segmentation 论文学习 摘要&#xff08;Abstract&#xff09; 对象检测性能的现状&#xff1a; 在PASCAL VOC数据集上测量的对象检测性能在过去几年已经达到了一个高点。最佳性能…

SQL server 数据库练习题及答案(练习3)

一、编程题 公司部门表 department 字段名称 数据类型 约束等 字段描述 id int 主键&#xff0c;自增 部门ID name varchar(32) 非空&#xff0c;唯一 部门名称 description varchar(1024) …

MR实战:分科汇总求月考平均分

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建学生实体类5、创建科目平均分映射器类…

混合专家模型(MoE)2022-2023顶会顶刊论文合集,包含算法、系统、应用3大类

混合专家模型&#xff08;MoE&#xff09;是一种深度学习技术&#xff0c;它通过将多个模型&#xff08;这些模型被称为"专家"&#xff09;直接结合在一起&#xff0c;以加快模型训练的速度&#xff0c;获得更好的预测性能。这种模型设计策略在大模型中尤为重要&…

W5100S-EVB-Pico评估版介绍

文章目录 1 简介2 硬件资源2.1 硬件规格2.2 引脚定义2.3 工作条件 3 参考资料3.1 Datasheet3.2 原理图3.3 尺寸图&#xff08;单位&#xff1a;mm&#xff09;3.4 参考例程 4 硬件协议栈优势 1 简介 W5100S-EVB-Pico是一款基于树莓派RP2040和全硬件TCP/IP协议栈以太网芯片W5100…

Java经典框架之Spring MVC

Spring MVC Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Spring MVC 入门案例 2. 基…

Android 13 - Media框架(26)- OMXNodeInstance(三)

上一节我们了解了OMXNodeInstance中的端口定义&#xff0c;这一节我们一起来学习ACodec、OMXNode、OMX 组件使用的 buffer 到底是怎么分配出来的&#xff0c;以及如何关联起来的。&#xff08;我们只会去了解 graphic buffer的创建、input bytebuffer的创建、secure buffer的创…

博客摘录「 Apollo安装和基本使用」2023年11月27日

一、常见配置中心对比 Spring Cloud Config: https://github.com/spring-cloud/spring-cloud-configApollo: https://github.com/ctripcorp/apolloNacos: https://github.com/alibaba/nacos 对比项目/配置中心 spring cloud config apollo nacos(重点) 开源时间 2014.9 …

尺寸公差分析与尺寸链计算软件-DTAS3D到底能给我们带来哪些价值?

【技能】DTAS3D能给我们带来哪些价值&#xff1f; DTAS3D是一款高度集成的公差分析软件&#xff0c;旨在为产品开发团队提供准确的建议&#xff0c;从而放心地将设计发布给制造部门。下面是DTAS3D的关键价值和应用: 1.与三维CAD无缝集成: DTAS3D与三维CAD软件 (CATIA、NX、Cr…

scala学习七:集合

一、集合colletion Scala提供了一套很好的集合实现&#xff0c;提供了一些集合类型的抽象。 Scala 集合分为可变的和不可变的集合。 可变集合可以在适当的地方被更新或扩展。可以修改&#xff0c;添加&#xff0c;移除一个集合的元素。 而不可变集合类&#xff0c;永远不会改变…

【操作系统】探究进程奥秘:显示进程列表的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;Linux专栏&#xff1a;《探秘Linux | 操作系统解密》⏰诗赋清音&#xff1a;月悬苍穹泛清辉&#xff0c;梦随星河徜徉辉。情牵天际云千层&#xff0c;志立乘风意自飞。 ​ 目录 &a…

Go_defer详解

defer 1. 前言 defer语句用于延迟函数的调用&#xff0c;每次defer都会把一个函数压入栈中&#xff0c;函数返回前再把延迟的函数取出并执行。 为了方便描述&#xff0c;我们把创建defer的函数称为主函数&#xff0c;defer语句后面的函数称为延迟函数。 延迟函数可能有输入…