- 博客(83)
- 资源 (5)
- 收藏
- 关注
原创 springboot在自定义拦截器中使用@Value获取值失败及@RefreshScope 不生效问题
因此,如果要使拦截器的属性值能够在应用程序运行期间动态更新,可以通过将该属性的值从 Spring 的 Environment 或 ConfigurableEnvironment 中获取,以确保始终使用最新的配置值。例如,在AuthenticationInterceptor类中,可以注入Environment或ConfigurableEnvironment的实例,并在需要使用timeout_exit属性的地方使用它来获取最新的配置值,而不是直接使用属性本身。注入 Environment 对象。
2023-05-12 11:07:38
2047
原创 Redis3.2.8集群搭建
Centos7redis3.2.8需要三台服务器,规定端口号为 7001 7002 7003 7004 7005 7006 并再linux中开放对应端口redis集群中总线端口为17001、17002、17003、17004、17005、17006 这些端口都要开放准备ruby环境下载redis创建文件夹下载 redis(也可手动上传)解压安装编译(在解压后目录)无法编译则执行复制配置文件修改配置文件启动 redis所有节点创建集群执行此步骤需要安装ruby环境...
2022-07-12 16:27:29
654
原创 Netty12-Netty的入站出站编解码
关系继承图粘包拆包:由于不可能知道远程节点是否会一次性发送一个完整的信息,tcp有可能出现粘包拆包的问题,** **这个例子,每次入站从ByteBuf中读取4字节,将其解码为一个int,然后将它添加到下一个List中。当没有更多元素可以被添加到该List中时,它的内容将会被发送给下一个ChannelInboundHandler。int在被添加到List中时,会被自动装箱为Integer。在调用readInt()方法前必须验证所输入的ByteBuf是否具有足够的数据入栈bytebuff为八个字节,此
2022-06-30 11:30:07
286
原创 Netty11-编码和解码-Protobuf
Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器• StringEncoder,对字符串数据进行编码• ObjectEncoder,对 Java 对象进行编码Netty 提供的解码器• StringDecoder, 对字符串数据进行解码• ObjectDecoder,对 Java 对象进行解码Netty 本身自带的 ObjectDecoder 和 ObjectEncoder 可以用来实现 POJO 对象或各种业务对象的编码和解码,底层使用的仍是 Java 序列化技术 , 而
2022-06-29 15:27:28
574
原创 Netty8-Netty核心模块2
1) 保存 Channel 相关的所有上下文信息,同时关联一个 ChannelHandler 对象2) 即ChannelHandlerContext 中 包 含 一 个 具 体 的 事 件 处 理 器 ChannelHandler ,同时ChannelHandlerContext 中也绑定了对应的 pipeline 和 Channel 的信息,方便对 ChannelHandler进行调用.3) 常用方法...
2022-06-24 16:36:59
300
原创 Netty7-Netty核心模块
1) Netty 网络通信的组件,能够用于执行网络 I/O 操作。2) 通过Channel 可获得当前网络连接的通道的状态3) 通过Channel 可获得 网络连接的配置参数 (例如接收缓冲区大小)4) Channel 提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保证在调用结束时所请求的 I/O 操作已完成5) 调用立即返回一个 ChannelFuture 实例,通过注册监听器到 ChannelFuture 上,可以I/O 操作
2022-06-24 15:34:12
319
原创 Netty6-快速入门HTTP服务
HTTPServerInitializer 通道初始化对象创建一个通道初始化对象 并给WorkGroup的 EventLoop 对应的管道设置处理器 可以是Netty提供的 也可以是自定义的Http ServerHandle服务启动后访问监听的浏览器端口即可得到返回消息此时控制台打印会发现浏览器发送了两次请求一次是请求网站,一次是请求网站的图标进行请求过滤...
2022-06-24 13:37:37
400
原创 Netty5-Netty模型
ServerHandler中处理事件是有一个非常耗时长的业务 -> 异步执行 -> 提交该channel 对应的NIOEventLoop 的 taskQueue中解决方案1 用户程序自定义的普通(异步)任务解决方案2 : 用户自定义定时任务 -》 该任务是提交到 scheduleTaskQueue中Netty异步模型基本介绍说明:当 Future 对象刚刚创建时,处于非完成状态,调用者可以通过返回的 ChannelFuture来获取操作执行的状态,注册监听函数来执行完成后的操作。常见有如下操作• 通
2022-06-24 10:37:49
246
原创 Netty4-Netty入门-模型理论
Netty 对 JDK 自带的 NIO 的 API 进行了封装工作原理图黄色的框表示对象, 蓝色的框表示线程白色的框表示方法(API)模型特点问题分析基于 I/O 复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理Reactor 对应的叫法: 1. 反应器模式 2. 分发者模式(Dispatcher) 3. 通知者模式(notifier)2) 基于线程池复用线程资源:
2022-06-23 20:10:06
274
原创 Netty3-NIO与零拷贝
传统IO 进行四次拷贝,三次切换(仅仅是读写)mmap 优化sendFile 优化1所谓零拷贝是操作系统角度看,是没有CPU拷贝sendFile 优化小结:这里其实有 一次cpu 拷贝kernel buffer -> socket buffer但是,拷贝的信息很少,比如lenght , offset , 消耗低,可以忽略零拷贝的再次理解零拷贝案例-Server零拷贝案例-CLientBIO、NIO、AIO对比表NIO零拷贝关键方法...
2022-06-23 14:49:12
116
原创 Netty-1-IO模型
Netty是一个处理网络高并发的框架 JDK ---> NIO ---> Netty">Java共支持3种网络编程模型/IO模式:BIO、NIO、AIOBIO、NIO、AIO适用场景分析BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解。NIO方式适用于连接数目多且连接比较短(netty基于NIO 但是支持长连接)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。编程比较复杂,JDK1.4开始支持。AIO方式使
2022-06-23 10:15:00
162
原创 ruoyi使用AOP控制数据权限案例
Aspect :表示切面,给业务方法增加的功能,叫做切面。 切面一般都是非业务功能, 而且切面功能一般都是可以复用的。 例如 日志功能, 事务功能, 权限检查,参数检查, 统计信息等等Orient:面向,对着Programming:编程详细请查看 AOP缓存实现ruoyi使用的是使用注解方式为切入点此注解可传入两个参数 分别为用户表别名 及部门表别名在查看完自定义注解后,再来看一下切面业务类定义切入点@annotation 即使用注解方式切入JoinPoint 当前切入点对象handl
2022-06-21 09:14:39
671
原创 Alibaba-Sentinel简单入门
1、简介项目地址:https://github.com/alibaba/Sentinel随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel 具有以下特征:丰富的应用场景:Sentinel 承接了阿里巴巴近10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel
2022-04-17 11:54:26
2387
1
原创 org.redisson.client.RedisResponseTimeoutException: Redis server response timeout (3000 ms)错误解决
org.redisson.client.RedisResponseTimeoutException: Redis server response timeout (3000 ms) occured after 3 retry attempts. Command: (HEXISTS), params: [com.dinsmooth.storehbase.schedule:entryTaskDelay, 1f15dcac-22b6-4865-92a5-a6452e6ae5c3:154], channel: [i
2022-04-16 15:49:23
9320
原创 分布式事务与本地事务
事务保证:1、订单服务异常,库存锁定不运行,全部回滚,撤销操作2、库存服务事务自治,锁定失败全部回滚,订单感受到,继续回滚3、库存服务锁定成功了,但是网络原因返回数据途中问题?4、库存服务锁定成功了,库存服务下面的逻辑发生故障,订单回滚了,怎么处理?利用消息队列实现最终一致库存服务锁定成功后发给消息队列消息(当前库存工作单),过段时间自动解锁,解锁时先查询订单的支付状态。解锁成功修改库存工作单详情项状态为已解锁1、远程服务假失败:远程服务其实成功了,由于网络故障等没有返回导致:订单回滚,库.
2022-04-12 19:20:22
339
原创 分布式session解决方案-SpringSession
1.Session复制让两个服务器之间互相同步Session,小型系统使用,在大型分布式系统下不适用2. 客户端存储3.hash一致性同一个hash后的ip落到同一个服务器上4.统一存储让Session统一存储在中间件或者数据库中,不存在内存中Spring整合SpringSession1.导入依赖<dependency> <groupId>org.springframework.session</groupId>
2022-04-11 12:25:25
173
原创 RabbitMQ
1.消息中间件使用场景异步处理应用解耦流量削峰简介大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力消息服务中两个重要概念:消息代理(message broker)和目的地(destination)当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。消息队列主要有两种形式的目的地队列(queue):点对点消息通信(point-to-point)• 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容
2022-04-11 12:24:27
1613
原创 如何保证接口的幂等性(防止重复提交)
一、什么是幂等性接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口的幂等性。二、哪些情况需要防止用户多次点击按钮用户页面回退再次提交微服务互相调用,由于网络问题,导致请求失败。feign 触发重试机制其他业务情况三、什么情
2022-04-11 12:22:58
5619
原创 Feign远程调用丢失请求头或异步情况丢失请求上下文
Feign在远程调用之前要构造请求,会调用很多拦截器来对请求进行增强,如果没有的拦截器,会创建一个新的request请求,这个请求里什么都没有解决:添加拦截器解决远程调用丢失请求头package cn.cloud.xmall.order.config;import feign.RequestInterceptor;import feign.RequestTemplate;import org.springframework.context.annotation.Bean;import o.
2022-04-09 19:55:50
775
原创 SpringBoot添加视图控制器来简写controller页面跳转
发送一个请求,跳转到一个页面前言发送一个请求,跳转到一个页面,通常是在controller定义一个空方法进行跳转例如: @GetMapping("/login.html") public String loginPage(){ return "login"; }可以使用springmvc的 viewcontroller 将请求和页面映射一、使用方法1.新建配置类package cn.cloud.xmall.auth.confi.
2022-03-23 14:30:18
1225
原创 GROUP_CONCAT(DISTINCT xxx.`xxx`) 使用
项目场景:mysql分组查询例如:例如要查询三个属性,需要对前两个属性去重,第三个结果进行去重并分组问题描述SELECT ssav.`attr_id`,ssav.`attr_name`,ssav.`attr_value`FROM `pms_sku_info` infoLEFT JOIN `pms_sku_sale_attr_value` ssav ON ssav.`sku_id` = info.`sku_id`WHERE info.`spu_id` = 1 GROUP BY ssav.
2022-03-21 13:40:56
1901
原创 Java中的异步与线程池
初始化线程的4种方式1、继承Thread Thread01 thread01 = new Thread01(); thread01.start(); public static class Thread01 extends Thread{ @Override public void run() { System.out.println("当前线程:"+Thread.currentThread().getId());
2022-03-20 19:00:32
7244
原创 gateWay-API网关
Route:网关的基本构建块。它由 ID、目标 URI、谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。断言:这是一个Java 8 函数断言。输入类型是Spring FrameworkServerWebExchange。这使您可以匹配来自 HTTP 请求的任何内容,例如标头或参数。过滤器GatewayFilter:这些是使用特定工厂构建的实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。spring: cloud: gateway: routes:
2022-03-19 08:32:44
306
原创 vue-组件抽取、父子组件交互
多个页面需要使用相同的一部分代码样式,可以将这部分代码拿出来封装为组件例如下面代码中的 “菜单 ” 就可以封装为一个通用的组件<template> <div> <el-row :gutter="20"> <el-col :span="6"> 菜单 </el-col> <el-col :span="18"> 表格 </el-col&g.
2022-03-19 08:31:45
628
原创 ElasticSearch-整合SpringBoot
1)、9300:TCPspring-data-elasticsearch:transport-api.jar;springboot 版本不同, transport-api.jar 不同,不能适配es 版本7.x 已经不建议使用,8 以后就要废弃2)、9200:HTTPJestClient:非官方,更新慢RestTemplate:模拟发HTTP 请求,ES 很多操作需要自己封装,麻烦HttpClient:同上Elasticsearch-Rest-Client:官方Re
2022-03-19 08:31:04
1669
原创 JVM-调优入门
jvm 内存模型程序计数器Program Counter Register:记录的是正在执行的虚拟机字节码指令的地址,此内存区域是唯一一个在JAVA 虚拟机规范中没有规定任何OutOfMemoryError 的区域虚拟机:VM Stack描述的是JAVA 方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法接口等信息局部变量表存储了编译期可知的各种基本数据类型、对象引用线程请求的栈深度不够会报StackOverflowError 异常
2022-03-17 21:27:48
528
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人