自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 收藏
  • 关注

原创 Java安全框架 - Shiro

第一章 入门概述1.1 是什么Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完成:认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。官网:https://shiro.apache.org/1.2 为什么要用 Shiro自 2003 年以来,框架格局发生了相当大的变化,因此今天仍然有很多系统在使用Shiro。这与 Shiro 的特性密

2024-04-09 22:05:48 873

原创 中间件系列 - Kafka3.x从入门到精通

Kafka传统定义: Kafka 是一个的基于的(Message Queue),主要应用于大数据实时处理领域。发布/订阅: 消息的发布者不会将消息直接发送给特定的订阅者,而是,订阅者。Kafka最新定义: Kaka是一个开源的 ( Event StreamingPlatform),被数千家公司用于高性能、、和。目前企业中比较常见的消息队列产品主要有 Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。在大数据场景主要采用 Kafka 作为消息队列。在 JavaEE 开发中主要采用

2024-01-30 14:42:04 631

原创 springboot项目实战-RetryTemplate

日常开发中,经常会遇到这样的场景:执行一次接口调用,如RPC调用,偶现失败,原因可能是dubbo超时、连接数耗尽、http网络抖动等,出现异常时我们并不能立即知道原因并作出反应,可能只是一个普通的RpcException或RuntimeException,对于这种小概率的异常,往往需要尝试再次调用(),因为由于网络问题、下游服务暂时的不稳定导致的异常,一段时间后理论上是可以自恢复的;例如,有时候项目需要进行同步数据,一定要同步成功,不然对于业务会有影响,偶发性的会出现调用接口失败,失败并不是特别多;

2024-01-12 15:58:56 982

原创 中间件系列 - Redis入门到实战(原理篇)

try {// 1.建立连接// 2.获取输出流、输入流// 3.发出请求// 3.1.获取授权 auth 123321// 3.2.set name 虎哥sendRequest("set", "name", "虎哥");// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 5.释放连接try {if (reader!if (writer!if (s!

2023-12-27 17:09:04 1509

原创 中间件系列 - Redis入门到实战(高级篇-最佳实践)

Key的最佳实践固定格式:[业务名]:[数据名]:[id]足够简短:不超过44字节不包含特殊字符Value的最佳实践:合理的拆分数据,拒绝BigKey选择合适数据结构Hash结构的entry数量不要超过1000设置合理的超时时间并不是很慢的查询才是慢查询,而是:在Redis执行时耗时超过某个阈值的命令,称为慢查询。

2023-12-27 15:25:45 1324

原创 中间件系列 - Redis入门到实战(高级篇-多级缓存)

前言学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目中间件系列 - Redis入门到实战本内容仅用于个人学习笔记,如有侵扰,联系删除学习目标JVM进程缓存Lua语法入门实现多级缓存缓存同步策略1 什么是多级缓存传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶

2023-12-27 14:11:37 1800 1

原创 中间件系列 - Redis入门到实战(高级篇-分布式缓存)

学习视频:本内容仅用于个人学习笔记,如有侵扰,联系删除学习目标。

2023-12-26 13:52:39 1327

原创 中间件系列 - Redis入门到实战(实战篇)

前言学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目本内容仅用于个人学习笔记,如有侵扰,联系删除本章学习目标:短信登录这一块我们会使用redis共享session来实现商户查询缓存通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容优惠卷秒杀通过本章节,我们可以学会Redis的计数器功能, 结合Lua

2023-12-22 14:43:35 713

原创 中间件系列 - Redis入门到实战(基础篇)

Redis是一种键值型的NoSql键值型NoSql其中键值型,是指Redis中存储的数据都是以keyvalue对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。对于存储的数据,没有类似Mysql那么严格的约束,比如唯一性,是否可以为null等等,所以我们把这种松散结构的数据库,称之为NoSQL数据库。存储方式关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响。

2023-12-09 15:10:26 1536

原创 中间件系列 - Redis入门到实战

1.学习视频:2. 本内容仅用于个人学习笔记,如有侵扰,联系删除。

2023-12-09 15:08:08 456

原创 ELK高级搜索,深度详解ElasticStack技术栈-下篇

前言:ELK高级搜索,深度详解ElasticStack技术栈-上篇14. search搜索入门14.1. 搜索语法入门14.1.1 query string search无条件搜索所有GET /book/_search结果:{ "took" : 969, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 },

2023-12-02 20:25:15 374

原创 ELK高级搜索,深度详解ElasticStack技术栈-上篇

1、黑马视频地址:java中级教程-ELK高级搜索,深度详解ElasticStack技术栈2、本内容仅用于个人学习笔记,如有侵扰,联系删除ELK是包含但不限于(简称es)、、 三个开源软件的组成的一个整体。这三个软件合成ELK。是用于数据抽取()、搜索分析()、数据展现()的一整套解决方案,所以也称作ELK stack。本课程从分别对三个组件经行详细介绍,尤其是,因为它是elk的核心。本课程从底层对文档、索引、搜索、聚合、集群经行介绍,从搜索和聚合分析实例来展现es的魅力。从内部如何采集数据到指定地方来展

2023-11-28 16:06:29 865

原创 JVM-性能优化工具 MAT

MAT()工具是一款功能强大的]ava堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT是基于Eclipse开发的,不仅可以单独使用,还可以作为插件的形式嵌入在Eclipse中使用。是一款免费的性能分析工具,使用起来非常方便。

2023-08-28 16:20:28 8595 1

原创 Nginx-深入剖析NginxStatus

NginxStatus是一个实用的状态模块,可以用来监控服务器的状态、统计网站流量和请求情况、自动热备和检测Nginx服务状态。开启NginxStatus只需要简单的配置,即可实现以上功能。

2023-08-28 10:21:46 1943

原创 Nginx-报错no live upstreams while connecting to upstream

客户端请求后端服务时一直报错,查看后端的服务是正常启动的。后来又查看Nginx的错误日志,发现请求后端接口时Nginx报错,查看该错误的解释可以得到的结果是upstream中没有可以提供服务的server,即Nginx已经发现不了存活的后端了,但是,我直接访问后端的server却是可以使用的,证明server端可用。最后查找文档,发现问题出现在业务上要求保持会话,但是Nginx到后端并没有保持会话,那么,Nginx当然就找不到后端可用服务,就会报。

2023-08-28 09:57:10 5482

原创 MyBatis Plus-个人笔记

(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。愿景我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。Wrapper : 条件构造抽象类,最顶端父类AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件QueryWrapper : 查询条件封装UpdateWrapper : Update 条件封装。

2023-08-10 22:56:15 398

原创 中间件系列 - RocketMQ

本内容仅用于个人学习笔记,如有侵扰,联系删除【尚硅谷】RocketMQ教程丨深度掌握MQ消息中间件_哔哩哔哩_bilibili,,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。从网上可以查看到很多的关于MQ用途的叙述,但总结起来其实就以下三点。限流削峰MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。异步解耦上游系统对下游系统的调用若为同步调用,则会大大降低系统

2023-07-13 16:23:56 2441

原创 springboot项目实战-API接口限流

该注解主要用于AOP功能的切入,不需要属性@Target({//限流的方法名 double value() default 0d;//发放的许可证数量 }通过来获取令牌,当然也可以通过来设置等待超时时间的方式获取令牌,如果超timeout为0或则调用无参的tryAcquire(),则代表非阻塞,获取不到立即返回,支持阻塞或可超时的令牌消费。/*** 存储限流量和方法必须是static且线程安全/*** 业务层切点try {//获取目标对象 Class

2023-07-08 12:24:07 2360

原创 项目部署脚本

【代码】项目部署脚本。

2023-05-22 10:13:59 143

原创 分布式任务调度系列 - XXL-JOB

本内容仅用于个人学习笔记,如有侵扰,联系删除程序为解决一个信息处理任务而预先编制的工作执行方案,这就是定时任务,核心组成如下:日常开发中,定时任务主要分为如下两种使用场景:在启动类上使用注解,表示开启定时任务根据业务需要,在方法上使用注解,属性配置定时规则启动项目就可以看控制台看到定时任务执行效果是一个开源的,具有丰富的任务管理功能以及高性能,高可用等特点的轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展、开箱即用!!!系统组成:总结:​ 调度中心和执行器两个模块分开部署,

2023-01-06 13:48:09 5390 1

原创 分布式与微服务系列 - SpringBoot + Zookeeper集群 + Dubbo分布式托管(提供者、消费者)+ Nginx反向代理

本内容仅用于个人学习笔记,如有侵扰,联系删除。

2022-12-26 17:32:47 2426 1

原创 分布式与微服务系列 - Dubbo

分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统(distributed system)是建立在网络之上的软件系统。随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

2022-12-26 15:55:23 296

原创 分布式与微服务系列 - Zookeeper下篇:源码解析

本内容仅用于个人学习笔记,如有侵扰,联系删除微服务系列 - Zookeeper上篇Zookeeper 是如何保证数据一致性的?拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全

2022-12-22 15:58:57 756 1

原创 分布式与微服务系列 - Zookeeper上篇:入门到精通

本内容仅用于个人学习笔记,如有侵扰,联系删除视频教程:【尚硅谷】大数据技术之Zookeeper 3.5.7版本教程是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个。每一个默认能够存储1MB的数据,每个都可以通过其路径唯一标识。提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。统一命名服务统一配置管理统一集群管理服务器动态上下线软负载均衡2)、解压JD

2022-12-22 15:58:16 900

原创 分布式任务调度系列 - PowerJob

任务(Job)被调度执行后会生成任务实例(Instance),任务实例记录了任务的运行时信息(任务与任务实例的关系类似于类与对象的关系)。调度服务器与示例工程都启动完毕后,再次前往Web页面( http://127.0.0.1:7700/ ),进行任务的配置与运行。:Powerjob的CRON模式下,时间轮是15秒扫描一次,这时间间隔不能小于15秒。若低于15秒会按15秒运行。:由 DAG(有向无环图)描述的一组任务(Job),用于任务编排。:我设置的是CRON,每5秒执行,但它实际15秒执行一次。

2022-12-21 11:08:51 6118

原创 Spring源码深度解析:二十一、事务实现⑤ - 事务的提交

如果事务被设置了回滚标识,则不会提交,直接回滚如果事务中有保存点信息则不会提交事务操作。如果事务非新事务的时候也不会去执行提交事务操作。

2022-12-13 15:51:43 743

原创 Spring源码深度解析:二十、事务实现④ - 事务的回滚

我们下面来看看回滚的具体操作即即 中的方法// 执行回滚 processRollback(defStatus , false);} . . . . // 省略了日志打印 private void processRollback(DefaultTransactionStatus status , boolean unexpected) {try {try {

2022-12-13 15:35:52 727

原创 Spring源码深度解析:十九、事务实现③ - 事务的创建

的功能是根据需要创建事务。这里面考虑到嵌套事务的情况,并对事务的传播属性进行了相应的处理,最终处理后。返回的是一个的值,里面封装了事务的各种信息,供给后面的回滚或者提交使用。以上:内容部分参考《Spring源码深度解析》如有侵扰,联系删除。内容仅用于自我记录学习使用。如有错误,欢迎指正。

2022-12-13 15:11:24 336

原创 Spring源码深度解析:十八、事务实现② - ProxyTransactionManagementConfiguration

方法的实现在其父类中实现的// 获取事务属性,如果 public TransactionAttribute getTransactionAttribute(Method method , @Nullable Class

2022-12-13 14:10:16 736

原创 Spring源码深度解析:十七、事务实现① - AutoProxyRegistrar

文章目录:Spring源码深度解析:文章目录由于事务的源码和前篇的Aop源码逻辑很类似,所以本篇中某些内容不会展开去讲解,建议先阅读完全集目录中的Aop部分,再来阅读本文会更好理解。我们在Springboot 中开始事务管理很简单,使用注解即可。那么也就说明是我们分析的入口了。很明显了指向我们去看去看的实现。可以看到,间接实现了接口,这里简单提一下就是会根据返回的字符串数组(一般是类的全路径名) 通过反射加载该类并注册到容器中。所以我们这里必然来看一下方法了,的实现在其父类ImportSelector

2022-12-13 11:13:10 382

原创 Spring源码深度解析:十六、@Aspect方式的AOP下篇 - createProxy

/ 这里的入参 beanClass :当前BeanClass, // beanName : 当前BeanName // specificInterceptors : 中篇中寻找出来的 Advisor // targetSource : SingletonTargetSource 目标类是单例 拥有给定对象的TargetSource接口的实现。这是Spring AOP框架使用的TargetSource接口的默认实现。通常不需要在应用程序代码中创建此类的对象。

2022-12-12 21:51:04 558

原创 Spring源码深度解析:十五、@Aspect方式的AOP中篇 - getAdvicesAndAdvisorsForBean

方法的作用就是筛选出适用于当前bean的Advisor。简单来说就是两步挑选出所有的Advisor。在 其中 通过调用了来完成了对硬编码注入的Advisor的获取解析返回。随后通过方式解析了 Aop 注解方式动态封装的Advisor并保存。通过Advisor中的Pointcut筛选出适合当前bean的Advisor。以上:内容部分参考《Spring源码深度解析》如有侵扰,联系删除。内容仅用于自我记录学习使用。如有错误,欢迎指正。

2022-12-12 21:05:58 654

原创 Spring源码深度解析:十四、@Aspect方式的AOP上篇 - @EnableAspectJAutoProxy

Aop 即面向切面编程,而 Aspect 是Aop 思想的一种实现。并不是所有的AOP框架都相同,它们在连接点模型上可能有强弱之分,有些允许在字段修饰符级别的应用通知,有些只支持方法调用相关的连接点。需要注意的是 Spring 只支持方法级别的连接点。Spring 提供了4种类型的AOP支持基于代理的经典Spring Aop纯Pojo切面@Aspect注解驱动的切面注入式的Aspectj的切面。

2022-12-12 21:03:47 771

原创 Spring源码深度解析:十三、JdbcTemplate 的源码分析

考虑到存在事务的情况,如果当前线程存在事务,那么说明在当前线程中存在共用数据库连接(存在事务则说明不止一个sql 语句被执行,则会共用同一个数据库连接, 所以如果当前Sql执行完毕,不能立即关闭数据库连接,而是将引用次数减一),这种情况下直接使用。对于警告的处理方式并不是直接抛出异常,出现警告很可能会出现数据错误,但是并不一定会影响程序执行,所以这里用户可以自己设置处理警告的方式,如果默认是忽略警告,当出现警告时仅打印警告日志,不抛出异常。如有侵扰,联系删除。除此之外,还有另一种形式的更新,其思路都相同。

2022-12-12 13:50:33 865

原创 Spring源码深度解析:十二、后处理器 BeanPostProcessor

是 Spring提供给我们的一个非常重要的扩展接口,并且Spring内部的很多功能也是通过来完成的(目前看到最典型的就是的 注入)。日常使用中,我们一般编写一个类来实现或者接口,根据每个方法的调用时机,来完成响应的工作。下面介绍一下接口方法,这里通过接口来介绍。是的子接口,在基础上又扩展了三个方法。

2022-12-08 15:51:48 676

原创 Spring源码深度解析:十一、Spring的循环依赖

文章目录:Spring源码深度解析:文章目录这篇文章是接着 Spring源码深度解析:七、bean的加载① - doGetBean 的继续分析过程。循环依赖,其实就是循环引用,就是两个或者两个以上的 bean 互相引用对方,最终形成一个闭环,如 A 依赖 B,B 依赖 C,C 依赖 A。如下图所示:循环依赖,其实就是一个死循环的过程,在初始化 A 的时候发现引用了 B,这时就会去初始化 B,然后又发现 B 引用 C,跑去初始化 C,初始化 C 的时候发现引用了 A,则又会去初始化 A,依次循环永不退出,

2022-12-07 16:20:23 535

原创 Spring源码深度解析:十、bean的属性注入④ - populateBean

文章目录:Spring源码深度解析:文章目录这篇文章是接着 Spring源码深度解析:八、bean的获取② - getSingleton 的继续分析过程。Spring在 方法中,完成了bean的完整创建。而在上篇 Spring源码深度解析:九、bean的获取② - createBeanInstance 中,完成了Bean的创建,但是属性内容还没有注入,本文就是将bean的属性进行注入的过程。本文涉及部分 BeanPostProcessor 内容,如需详阅 :AbstractAutowireCapable

2022-12-06 15:56:47 546 1

原创 Spring源码深度解析:九、bean的获取③ - createBeanInstance

的流程图如下,让我们根据流程图一步一步的学习一下spring是如何创建bean的吧文章目录:Spring源码分析:文章目录这篇文章应该是接着 Spring源码深度解析:八、bean的获取② - getSingleton 的继续分析过程。本文主要是分析的方法是,功能是Spring 具体创建bean的过程。调用如下:根据方法名就知道,是创建bean的实例,也就注定了这个方法的不平凡。下面就来一步一步的剖析他。具体源码如下:我们可以看到:下面我们来解析代码。这部分的功能 : 若中设置了则使用 提供的bea

2022-11-24 16:49:09 627

原创 Spring源码深度解析:八、bean的获取② - getSingleton

上面可以看到,主要步骤还是在回调的方法中。那么我们来看看在bean加载过程中的做了什么。代码如下:兜了一大圈关键代码还是在方法里。接下来,我们就来仔细分析一下方法。// 1. 锁定class, 根据mdb和beanName解析出来class Class

2022-11-23 17:25:12 646

原创 Spring源码深度解析:七、bean的加载① - doGetBean

getBean()方法是spring ioc的核心,阅读getBean()方法的源码也是理解spring容器工作原理所必须要做的事情!我们先来看一下getBean()方法,getBean()的具体实现逻辑在方法中。Spring源码分析:文章目录下面我们开始进入正题,进行的内容分析。这个方法是一切的核心(Bean的创建过程也是在这个方法中完成)。首先我们先来整体过一遍方法代码。后面将会对一些关键点进行详细解释。// 1. 提取出对应的beanName。

2022-11-22 16:33:35 723

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除