- 博客(37)
- 资源 (1)
- 收藏
- 关注
原创 如何保证接口幂等性
客户端会先发送一个请求去获取 token,服务端会生成一个全局唯一的 ID 作为 token 保存在 redis 中,同时把这个 ID 返回给客户端。如果校验失败,说明 redis 中已经没有对应的 token,则表示重复操作,直接返回指定的结果给客户端。服务端会校验这个 token,如果校验成功,则执行业务,并删除 redis 中的 token。因为表中某个字段带有唯一索引,如果插入成功,证明表中没有这次请求的信息,则执行后续的业务逻辑。如果设置成功,证明这是第一次请求,则执行后续的业务逻辑。
2024-07-05 15:42:56 914
原创 自定义注解+aop实现接口限流
自定义注解+aop实现接口限流一、自定义注解@Target(ElementType.METHOD) //指定注解在方法上@Retention(RetentionPolicy.RUNTIME) //指定新注解保留到程序运行时期@Inherited // 指定新注解标注在父类上时可以被子类继承@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface RateLimiterQry { /
2021-07-19 21:23:25 684
原创 反射与注解
反射与注解一、反射使用反射机制可以动态的获取当前class的信息,比如方法的信息、注解信息、方法的参数、属性反射目的:方便开发者对框架的拓展,缺点:消耗一定资源、破坏封装性二、字节码对象创建方式 Class class1 = 类名.class Class class2 = Class.forName(包路径) //使用最多 Class class3 = 对象.getClass() // class1 == class2 == class3 三、反射常用api
2021-07-19 21:17:42 458
原创 Spring是什么?
Spring是什么?一.spring是什么?Spring是一个轻量级的IoC/DI和AOP容器的开源框架二.spring的优点1.Spring 能帮我们低侵入/低耦合地根据配置文件创建及组装对象之间的依赖关系 //解耦2.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制等 //提高代码重用性3.Spring 能非常简单的且强大的声明式事务管理 //使用xml或注解的方法,底层用到动态代理4.Spring 提供了与第三方数据访问框架(如JPA)无缝集成
2020-09-10 17:42:08 7801 1
原创 将cookie响应给浏览器(携带token)
将cookie响应给浏览器(携带token)CookieUtil工具类public class CookieUtil { public static void addCookie(String cookieName, String cookieValue , int expireTime, HttpServletResponse response){ //通过cookie名字,cookie值创建对象 Cookie cookie = new
2020-09-07 14:27:54 1998
原创 JSR303参数校验
JSR303参数校验一.JSR303是什么? JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解, 我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。二.业务模块 member-server封装类(添加限制条件)@Getter@Setterpublic class LoginVo { //使用注解,限制条件,并规定错误信息 @Pattern(regexp = "1[345678]\\d{9}",messa
2020-09-07 14:21:21 694
原创 分布式项目统一异常处理
分布式项目统一异常处理公共模块shop-common1.异常后返回给前端的封装类@Setter@Getterpublic class CodeMsg implements Serializable { private int code; //状态码 private String msg; //异常信息或成功信息 public CodeMsg(int code, String msg) { this.code = code; this.m
2020-09-07 14:00:47 1482 1
原创 分布式项目中的跨域问题
分布式项目中的跨域问题一.什么时候产出跨域?当浏览器访问服务时(网关),ip 端口 协议一个不同就会产生跨域问题二.跨域请求原理三.解决跨域问题在Zuul网关启动类加上以下配置即可@SpringBootApplication@EnableZuulProxypublic class ZuulServerAPP { public static void main(String[] args) { SpringApplication.run(ZuulServerAPP.cla
2020-09-05 17:16:02 975
原创 SpringCloud之Config(分布式配置中心)
SpringCloud之Config(分布式配置中心)一.SpringCloud config是什么?简单来说,Spring Cloud Config就是能将各个 应用/系统/模块 的配置文件存放到统一的地方然后进行管理(Git 或者 SVN),客户端通过接口去获取这些配置文件。 SpringCloud config 为微服务架构中的微服务提供集中化的外部配置支持, 配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置二.SpringCloud config怎么用?SpringC
2020-09-04 23:26:29 382
原创 SpringCloud之Sleuth&Zipkin(分布式服务跟踪)
SpringCloud之Sleuth&Zipkin(分布式服务跟踪)一.Sleuth&Zipkin是什么?sleuth :链路追踪器zipkin:链路分析器,可以理解为可视化界面,配合Sleuth可以清晰定位请求流程//zipkin是Twitter基于google的分布式监控系统Dapper(论文)的开发源实现,//zipkin用于跟踪分布式服务之间的应用数据链路,分析处理延时,帮助我们改进系统的性能和定位故障。二.为什么需要链路追踪? 在微服务框架中,一个由客户端发起的请求
2020-09-04 18:09:19 574
原创 SpringCloud之Zuul(微服务网关)
SpringCloud之Zuul(微服务网关) 在上面我们学习了 Eureka 之后我们知道了服务提供者是消费者通过[Eureka] Server进行访问的,即[Eureka] Server是服务提供者的统一入口。那么整个应用中存在那么多消费者需要用户进行调用,这个时候用户该怎样访问这些消费者工程呢?当然可以像之前那样直接访问这些工程。但这种方式没有统一的消费者工程调用入口,不便于访问与管理,而 Zuul 就是这样的一个对于消费者的统一入口。一.Zull是什么?Zuul网关是系统的唯一对外的入
2020-09-04 17:00:23 283
原创 SpringCloud之Feign(声明式服务调用)
SpringCloud之Feign(声明式服务调用) 前面已经介绍了Ribbon和Hystrix了,可以发现的是:他俩作为基础工具类框架广泛地应用在各个微服务的实现中。我们会发现对这两个框架的使用几乎是同时出现的,并且使用RestTemplate还是不方便,我们每次都要使用RestTemplate进行远程调用 为了简化我们的开发,Spring Cloud Feign出现了!它基于 Netflix Feign 实现,整合了 Spring Cloud Ribbon 与 Spring Cloud Hy
2020-09-04 15:24:37 461
原创 RocketMQ是什么?
RocketMQ介绍一.消息中间件1.应用场景 1.异步解耦 例:注册 发短信 发邮件的操作,我们以前要先注册,再等着发短信,最后等着发邮件, 而使用消息件就直接注册将其封装成一个对象放到消息中间件中,然后由消息中间件去监控发短信与发邮件, 然后接着去干其他事情,不用等着 2.削峰填谷 //请求先到消息中间件 然后服务器一点一点的获取中间件中的请求,避免一次性所有请求全部到达服务器 3.分布式缓存同步/消息分发 //微服务中,每个服务都放到消息中间件中
2020-09-04 12:01:08 12152
原创 SpringCloud之Hystrix(服务熔断与降级)
SpringCloud之Hystrix(服务熔断与降级)讲Hystrix之前我们先来了解一下降级和熔断以及服务雪崩效应一.降级//降级1.抛弃非核心业务,保障核心页面的正常运行.2.服务器忙,请稍后再试,不让客户端等待立刻返回一个友好的提示,fallback//引发服务降级: 1>程序运行异常 2>调用超时 3>服务熔断出发服务降级 4>线程池/信号量打满也会导致服务降级二.熔断1.类比保险丝超过最大功率后熔断一样, 服务器达到最大
2020-09-02 22:12:32 968
原创 SpringCloud之Ribbon(客户端负载均衡)
SpringCloud之Ribbon(客户端负载均衡)通过Eureka服务治理框架,我们可以通过服务名来获取具体的服务实例的位置了(IP),一般在使用SpringCloud的时候不需要自己手动创建HttpClient来进行远程调用,我们可以使用Spring封装好的RestTemplate工具类进行远程调用,使用Ribbon进行客户端负载均衡一.使用RestTemplate发送请求+客户端负载均衡(Ribbon)步骤: 1.在启动类中添加RestTemplate的bean 2.注入RestTempl
2020-08-31 13:36:07 253
原创 SpringCloud是什么?
一.springcloud是什么?1.SpringCloud是什么? 1.Spring Cloud就是微服务系统架构的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶 2.在平时我们构建微服务的过程中需要做如服务发现注册、配置中心、负载均衡、断路器、数据监控等操作, 而Spring Cloud 为我们提供了一套简易的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务项目的构建2.什么是分布式? 1.将各个组件分开部署,某个组件占一个服务器,互相独立,互
2020-08-30 20:57:15 15373 6
原创 SpringCloud之Eureka(服务注册与发现)
SpringCloud之Eureka(服务注册与发现)一.为什么需要注册中心Eureka?讲Eureka之前我们先说说使用SpringCloud构建项目1.从分布式/微服务的角度而言:就是把我们一大的项目,分解成多个小的模块。这些小的模块组合起来,完成功能2.那会出现什么问题呢? 首当其冲的就是子系统之间的通讯问题。子系统与子系统之间不是在同一个环境下,那就需要远程调用。3.既然是远程调用,就必须知道ip地址,而ip地址经常变动的话,那我们手动维护这些静态资源会非常麻烦,所以就有了今天的主角E
2020-08-30 18:40:43 297
原创 Linux 高级命令及项目部署
Linux 高级命令一.用户管理计算资源:(一切皆文件)权限:定义资源或服务的访问能力,称之为权限 定义某一个特定的人资源或者服务的访问能力, 用户 定义一类用户具有访问某个资源或服务的能力. 用户组(存放一些列用户的容器),同时用户组还拥有具有访问某个资源的权限 定义一个资源的权限: 1. 用户具有该资源的权限(文件所有者,属主) 2. 用户组具有该资源的权限(属组) 3. 其他用户(既不是属主,也不是属组)文件权限: r 可读 可以执行类似cat命令的操作 w 可
2020-08-30 11:50:20 289
原创 Linux基本命令
day-01 linux 01一.常用命令1.命令提示符[root@localhost ~]#其中: root 当前登陆用户 localhost 主机名 ~ 当前所在目录(家目录) 如果是root代表/root; 如果是普通用户user1代表/home/user1 # 超级用户的提示符# 普通用户提示符$ 2.查看目录中内容ls [选项] [文件或目录]选项: -a 显示所有文件,包括隐藏文件 -l 显示详细信息 -h 人性化
2020-08-30 11:31:27 265
原创 Git工具
Git工具一.git 概念 一个分布式版本控制系统,每个人都将项目保存在自己的电脑上,不需要联网就能工作,每个人只需要将自己完成或者修改的上传到中央服务器就好了二.Git基本操作流程//1.安装 Git//2.右键,点击Git Bash Here//3.输入用户名和Email地址,单机不联网可以随便输入 git config --global user.name "Your Name" git config --global user.email "email@example.com"/
2020-08-24 20:40:49 784
原创 权限管理之shiro
一.权限管理概述1.Apache Shiro 在rbac项目中,关于权限管理方面,我们是自己写的方法去实现的,而Apache Shiro是一个开源的框架,里面封装好了身份验证、授权、密码和会话管理等功能,我们直接使用即可2.Spring Security Spring Security也是一个用于安全权限管理的框架,它与Spring紧密结合3.Spring Security与Apache Shiro 比较 Spring Security相比于Apache Shiro功能更加强大,
2020-08-24 19:47:22 168
原创 数据的持久化同步落地入库
数据的持久化/同步/落地/入库(定时器)分析数据持久化思考: 1.需要将哪些数据进行持久化处理 数据被改动,并且一定业务价值的数据,需要同步数据库 此处:1>攻略的统计对象vo数据 2>用户攻略收藏列表[拓展] 2.持久化处理逻辑应该放置在哪个项目实现 1>trip-mgrsite 跟 trip-website-api 2>api项目后续可能需要进行拓展,比如分布式微服务或者集群操作,如果将持久化逻辑放置api项目, 会存在多次持久化操作,不建议,另
2020-08-18 17:40:38 298 1
原创 spring容器监听器
spring容器监听器(初始化redis数据)redis缓存一个完整redis缓存操作包括3个步骤1.缓存数据库初始化(预热)[将数据库数据加载缓存]2.缓存的业务操作3.缓存数据持久化[将缓存数据同步到数据库]思考: 1.需要将哪些数据进行初始化处理 1>需要频繁变动[DML]的数据,需要初始化缓存 2>不需要频繁变动[DQL]的数据,需要初始化的缓存 此处初始化:1.攻略的统计对象(vo) 2.初始化处理逻辑应该放置在哪个项目实现 1>trip-
2020-08-18 17:20:35 451
原创 java实现点赞(顶)功能
java实现点赞(顶)功能需求分析分析: 1.必须先登录,否则提示 2.第一次点赞(顶),点赞操作,点赞数+1,提示顶成功 2.第二次点赞(顶),没有操作,提示今天顶过了---------------------------------------------核心问题: 1>怎么区分当前请求时顶成功操作(第一次顶)还是今天已经顶过(第二次顶) 2>怎么考虑今天已顶过 ----------------------------------------------
2020-08-18 16:54:12 6595
原创 java实现收藏功能
java实现收藏功能需求分析分析: 1.要求用户必须登录,否则提示 2.第一次点击,表示收藏成功,收藏数+1,显示蓝色星星 3.第二次点击,表示取消收藏操作,收藏数-1,显示白色星星----------------------------------------------------------------------- 核心问题:当前请求时收藏操作,还是取消收藏操作 [这类型的操作,称之为有状态的操作]解决方案:第一次请求过来时,留下一个记号,第二次请求时候,根据记号有无决定收
2020-08-18 16:17:00 11474 5
原创 java中文章的阅读数统计
java中文章的阅读数统计1.直接操作数据库进行增加操作存在问题存在问题: 每次请求都要update数据库,如果访问量大了之后,数据库存在操作压力,此时怎么办?解决方法: 1.提高数据库性能(横向/纵向拓展) 2.使用缓存方式减轻数据压力推荐使用缓存方式: 优点:操作快捷,可以减轻数据访问压力 缺点:数据可能丢失-----------------------------------------------------------------------------------注
2020-08-18 15:26:34 4187 3
原创 springmvc自定义参数解析器
springmvc自定义参数解析器操作原理1.当请求进入映射方法之后,发现映射方法声明的形式参数2.springmvc马上遍历所有参数解析器(包括自定义解析器),一个一个执行supportParameter方法, 一旦返回true,停止循环,表示当前解析器马上调用该解析器resolverArgument方法, 将方法方法返回值注入到形式参数变量中3.例子,假设映射方法声明一个UserInfo这个参数类型,springmvc执行时候, 发现UserInfoArgumentResolver
2020-08-18 14:36:49 1031 1
原创 java中的映射思想(map)
java中的映射思想(map)学会如何将一个值转换为另一个值(映射思想:map))当我们选择4-7天时,前端传过来的数据是2,那么我们怎么将2转换为4-7去查询呢? 分析: dayType 范围值 1 [0,3] 2 [4,7] 3 [8,14] 上面数据结构类似java中map映射结构 Map<Integer,?>map=.... -----------------
2020-08-18 11:57:22 542
原创 开发中评论点赞操作
开发中评论点赞操作评论点赞需求分析需求:攻略评论点赞 1.要求用户必须登录 2.第一次点赞,为点赞操作,点赞数+1,小手变成红色 3.第二次点赞,为取消点赞,点赞数-1,小手变成白色 4.如果换一个用户(前提:该用户没点赞该评论),小手是白色核心问题: 1.跟多个登录用户扯上关系 2.区分当前请求是点赞还是取消点赞具体步骤分析 1.点击评论点赞,传入评论id,并且拿到当前用户登录id 2.通过评论id查询出当前点赞的集合list 3.判断用户uid是否在list集合中 4
2020-08-18 11:35:28 757
原创 SpringBoot 统一异常处理
SpringBoot 统一异常处理一、异常处理的原则1、调用方法的时候返回布尔值来代替返回null,这样可以 避免NullPointerException。由于空指针是java异常里最恶心的异常。2、 catch块里别不写代码。空catch块是异常处理里的错误事件,因为它只是捕获了异常,却没有任何处理或者提示。通常你起码要打印出异常信息,当然你最好根据需求对异常信息进行处理。3、能抛受控异常就尽量不抛受非控异常或者RuntimeException的异常。通过去掉重复的异常处理代码,可以提高代码的可读
2020-08-10 18:12:51 173 1
原创 redis的key键设计(善用枚举类)
redis的key键设计(善用枚举类)枚举类特点枚举类特点: 1:枚举类构造器只能是私有 2:枚举类当定义完成之后,实例个数固定 4:enum和class、interface的地位一样 5:使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类,枚举类可以实现一个或多个接口。 6:枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。 7:使用enum定义、非抽象的枚举类默认
2020-08-10 17:53:19 1575
原创 登录拦截器原理
登录拦截器原理以及解决拦截器跨域问题一.可以实现登录拦截的技术filter(shiro) interceptor filter:web的基础组件,功能相对简单interceptor:springmvc组件,背靠spring容器,功能相对丰富,一般选用这个1:web组件理解,有助于后续逻辑模块实现选择2:比较多个组件优缺点,进行最实践的选中拦截器原理//handler变量是这个HandlerMethod的实例对象//HandlerMethod 请求映射方法信息(所在类的信息,方法信息
2020-08-10 17:07:46 5404 2
原创 令牌登录方式流程(token)
用户登录登录需求分析1:获取账号跟密码2:通过账号密码查询数据库获取用户对象user3:如果用户存在,表示登录成功4:使用UUID创建出随机的唯一的token值 String token = ....5:以token'为key,user为value 缓存到redis中6:将token跟用户对象使用json格式放回浏览器 浏览器: 接受到返回值,解析出token跟用户信息,并缓存 前端发起请求是,获取浏览器缓存的token值,通过请求头的方式携带到后端服务器 接口2:
2020-08-10 16:31:40 6302
原创 开发中简易的用户注册验证
开发中简易的用户注册验证登录页面 拆分需求 1:校验手机号码是否正确 2:校验手机号是否已经注册 3:校验注册信息格式是否正确(非空校验,等值校验,长度等) 4:发送注册短信验证码 5:用户注册UserController(控制器层)@RestController@RequestMapping("/users")public class UserController {@GetMapping("/checkPhone")//1.验证手机号是否存在 publ
2020-08-10 15:45:47 614
原创 JDBC与Mybatis区别
JDBC与Mybatis1.JDBC是什么?java data base connectivity java数据库连接,是java连接数据库的标准,由sun公司提供的一组类和一组接口,由给个数据库厂商提供实现类[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WiUSB7dK-1596624067003)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1593584065073.png)]
2020-08-05 18:42:48 4371
SpringCloud是什么.md
2020-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人