- 博客(1920)
- 资源 (12)
- 收藏
- 关注
原创 Spring Boot - Application Events 的发布顺序_ContextRefreshedListener
Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。在 Spring Boot 中,事件发布和监听的机制是通过以及事件发布者()来实现的。其中,ApplicationEvent 是所有自定义事件的基础,自定义事件需要继承自它。是监听特定事件并做出响应的接口,开发者可以通过实现该接口来定义自己的监听器。事件发布者(通常由 Spring 的。
2024-01-13 06:15:00 3864
原创 Spring Boot - Application Events 的发布顺序_ApplicationPreparedEvent
Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。在 Spring Boot 中,事件发布和监听的机制是通过以及事件发布者()来实现的。其中,ApplicationEvent 是所有自定义事件的基础,自定义事件需要继承自它。是监听特定事件并做出响应的接口,开发者可以通过实现该接口来定义自己的监听器。事件发布者(通常由 Spring 的。
2024-01-12 20:30:00 4771
原创 Spring Boot - Application Events 的发布顺序_ApplicationContextInitializedEvent
Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。在 Spring Boot 中,事件发布和监听的机制是通过以及事件发布者()来实现的。其中,ApplicationEvent 是所有自定义事件的基础,自定义事件需要继承自它。是监听特定事件并做出响应的接口,开发者可以通过实现该接口来定义自己的监听器。事件发布者(通常由 Spring 的。
2024-01-12 05:45:00 4887
原创 Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent
Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。在 Spring Boot 中,事件发布和监听的机制是通过以及事件发布者()来实现的。其中,ApplicationEvent 是所有自定义事件的基础,自定义事件需要继承自它。是监听特定事件并做出响应的接口,开发者可以通过实现该接口来定义自己的监听器。事件发布者(通常由 Spring 的。
2024-01-11 22:15:00 4343
原创 Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent
Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。在 Spring Boot 中,事件发布和监听的机制是通过以及事件发布者()来实现的。其中,ApplicationEvent 是所有自定义事件的基础,自定义事件需要继承自它。是监听特定事件并做出响应的接口,开发者可以通过实现该接口来定义自己的监听器。事件发布者(通常由 Spring 的。
2024-01-11 20:15:00 4213
原创 OpenSource - 基于Netty的网络扩展库HServer
HServer是一个基于Netty开发网络扩展库.使用插件方式来扩展我们的业务 HServer提供 web,gateway,rpc 等插件 同时用户也可以自定义插件,来完成各种各样的业务场景。
2024-01-07 22:09:36 3730
原创 动态编译 - Dynamically Compile and Load External Java Classes
读取源代码: 首先,需要获取到外部的Java源代码。这通常是通过读取文件、网络资源或者数据库中的源代码字符串来实现的。编译源代码: 接下来,需要使用Java编译器来编译这些源代码。这可以通过调用javac命令行工具或者使用Java API中的编译器API(如)来实现。生成字节码: 编译过程会生成字节码文件(.class文件)。这些字节码文件包含了编译后的Java类的信息。加载字节码: 最后,需要将这些字节码文件加载到Java虚拟机(JVM)中。这可以通过创建一个子类并重写其loadClass。
2024-01-07 05:45:00 4031
原创 每日一博 - 多租户技术及其三种数据存储策略
多租户技术(Multi-Tenant Technology)是软件即服务(SaaS)架构中的一项核心技术,允许单一软件应用或服务同时服务于多个客户(即“租户”),而不会互相干扰,同时保持数据隔离和安全性。
2024-01-06 22:14:10 3908
原创 OpenSource - File Preview 文件预览组件
使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、wps、xls、xlsx、zip、rar、ofd、xmind、bpmn 、eml 、epub、3ds、dwg、psd 、mp4、mp3以及众多类文本类型文件在线预览。
2024-01-06 22:00:30 3690
原创 Java Review - MapStruct_使用 Intellij 和 Maven Debug 分析MapStruct实现原理
通过定义映射接口和相应的映射方法,MapStruct 在编译时生成这些接口的实现类,从而实现了类型安全的对象映射,避免了手动编写繁琐且容易出错的映射代码。例如,当你使用MapStruct注解来标注两个Java Bean类,并希望通过注解处理器生成它们之间的映射代码时,MapStruct的注解处理器就会被javac调用。MapStruct 使用注解处理器技术,结合了JSR 269的功能,实现了在编译时生成高效的映射代码,从而提供了更快的执行速度和更好的类型安全性。命令来切换到POM文件所在的目录。
2024-01-05 06:15:00 4162
原创 Java Review - MapStruct全掌握:9个案例探究高效快捷的Java对象映射
MapStruct是一个代码生成库,旨在简化Java Bean之间的映射。它允许开发者在定义了映射规则后,通过注解处理器在编译时自动生成映射代码。MapStruct遵循“约定优于配置”的原则,大多数情况下,它能够智能地处理常见的映射场景,而无需开发者编写繁琐的映射逻辑。MapStruct允许在映射器中定义自定义方法,实现复杂的映射逻辑。例如,可以定义一个方法,将源对象中的某个字段进行转换后赋值给目标对象Entity@Data// 出厂日期 , String类型@Data。
2024-01-05 04:45:00 5245
原创 Java Review - Spring BeanUtils 踩坑记
Spring BeanUtils 是 Spring 框架中的一部分,它提供了一套用于简化 Java 对象属性操作的工具类。尽管它的名字暗示了它可能与 Java Bean 相关,但实际上它并不操作 Java Bean 本身,而是操作对象的属性。BeanUtils 的核心功能是提供属性复制的方法,这在需要将一个对象的属性值复制到另一个对象时非常有用。属性复制方法可以将一个对象的属性值复制到另一个对象中,前提是这两个对象中必须存在相同名称和类型的属性。忽略特定属性。
2024-01-04 21:30:00 4681
原创 每日一博 - 动态编译报错 ClassNotFoundException: com.sun.tools.javac.processing.JavacProcessingEnvironment
这个类是Java编译器API的一部分,它是用于访问编译器的内部处理环境的。一看属于度一类,就是 toolls中的类没找到。表示Java运行时环境无法找到名为。
2024-01-04 18:06:17 4239
原创 Nginx - 使用error_page实现带有图片的自定义错误页面
在Nginx中,您可以使用error_page指令来指定当请求遇到特定错误时应当显示的自定义错误页面。创建错误页面首先,需要创建一个HTML文件作为错误页面。在这个文件中,可以定义需要的图片、样式和任何其他内容。例如,如果您想要在404错误页面显示一张图片,可以创建一个名为404.html的文件,并在其中使用标签来引用图片。配置Nginx在Nginx配置文件中(通常是nginx.conf或一个包含特定站点配置的文件),您需要添加一个server块来定义错误处理。例如:server {
2024-01-02 22:00:00 4392
原创 BDCC - 数据集成领域的主流中间件_ Apache SeaTunnel vs Flink CDC vs DataX vs Apache Sqoop vs Apache Flume
Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品,支持海量数据的离线及实时同步。SeaTunnel 产品实现了高可靠性、集中管理、可视化监控等一体的数据集成统一平台。
2023-12-29 21:45:00 4766 1
原创 Netty Review - 深入理解Netty: ChannelHandler的生命周期与事件处理机制
Netty的是处理网络事件(如数据读取、数据写入、连接建立、连接关闭等)的核心组件。在Netty中,的生命周期与Channel初始化(Initialization)方法被调用,这通常发生在初始化时,表示一个新的被加入到中。注册(Registration)方法被调用,这表示Channel已经成功注册到它的EventLoop上。激活(Activation)方法被调用,表示Channel已经成功激活,可以开始接收和发送数据。读取数据(Read)方法被调用,这表示从Channel中读取到了数据。
2023-12-24 11:15:00 4901
原创 Netty Review - Netty自动重连机制揭秘:原理与最佳实践
自动重连是一个用于提高网络应用稳定性和可靠性的功能。当客户端与服务器之间的连接意外断开时,客户端可以自动尝试重新连接到服务器,以确保数据的正常传输。 自动重连是指在网络通信中,当客户端与服务器之间的连接由于某种原因断开时,客户端能够自动尝试重新建立连接的机制。这是一种用于提高网络应用稳定性和可靠性的功能。具体来说,当客户端检测到与服务器的连接中断时,它会自动发起新的连接尝试,以确保数据的正常传输。这对于处理网络不稳定性、临时断开或服务器重新启动等情况非常重要,可以减少用户干预,提升应用的用户体验
2023-12-24 09:15:00 9086 1
原创 OpenSource - SCM服务管理平台
https://scm.chusen.tech/https://scm.chusen.tech/doc/链接: https://pan.baidu.com/s/1sRxfytoU2fAHX11NKJ1hqA?pwd=7ji7
2023-12-24 06:00:00 4200
原创 Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析
Netty 的心跳检测机制是一种用于保持网络连接活跃的机制,它通过定期发送和接收特定的消息(心跳包)来确保客户端和服务器之间的连接仍然有效。这种机制对于需要长时间保持连接的应用程序(如实时通信、监控、推送服务等)非常重要,因为它可以帮助检测连接是否因网络问题或客户端崩溃而断开。Netty 提供了心跳检测机制,用于检测连接是否仍然处于活动状态。在 TCP 连接中,如果连接断开了,服务端和客户端不会立即知道它已经断开。因此,通过发送心跳消息并等待对方的响应,可以检测连接是否仍然处于活动状态。
2023-12-23 21:59:48 4821
原创 Netty Review - 优化Netty通信:如何应对粘包和拆包挑战_自定义长度分包编解码码器
Netty Review - 借助SimpleTalkRoom初体验异步网络编程的魅力Netty Review - 优化Netty通信:如何应对粘包和拆包挑战中我们遗留了一个内容今天我们就通过自定义长度分包解码器来解决粘包拆包的问题一个用于编码的另一个用于解码的。/*** @author 小工匠* @description: 自定义协议*//*** 定义一次发送包体长度*//*** 一次发送包体内容*/return len;
2023-12-23 16:25:35 4186
原创 Netty Review - 优化Netty通信:如何应对粘包和拆包挑战
Netty Review - 借助SimpleTalkRoom初体验异步网络编程的魅力粘包和拆包是在计算机网络通信中常见的问题,特别是在使用基于流的传输协议(如TCP)时。这两个问题涉及到数据在传输过程中的组织和解析。粘包(Packet Concatenation):粘包指的是发送方发送的多个小数据包在接收方看来被组合成一个大的数据包。发送方连续发送的数据可能在网络中被合并成一个数据流,导致接收方无法准确分辨每个数据包的边界。使用特殊的分隔符标记数据包的边界,或者在数据包中包含长度信息。
2023-12-22 07:00:00 4258
原创 Netty Review - Netty与Protostuff:打造高效的网络通信
总的来说,Protostuff是一个高效、简单、可扩展的Java序列化库,适用于多种场景,特别是对于大量数据和高性能要求的应用场景有较好的表现。总体而言,该工具类简化了protobuf的序列化和反序列化操作,并提供了Schema的缓存机制以提高性能。,一个用于接受连接(boss),另一个用于处理已接受连接的IO操作(worker)。库,这是一个Google protobuf的Java扩展库,提供了更简单、更灵活的API。的Netty通道入站处理器,主要用于处理通道读取事件和通道激活事件。
2023-12-22 05:30:00 5392
原创 Netty Review - ObjectEncoder对象和ObjectDecoder对象解码器的使用与源码解读
Netty是一个高性能、异步的网络应用程序框架,它提供了对TCP、UDP和文件传输的支持。在Netty中,数据的发送和接收都是以字节流的形式进行的,因此需要将对象转换为字节流(编码)以及将字节流转换回对象(解码)。
2023-12-21 06:45:00 4568
原创 Netty Review - StringEncoder字符串编码器和StringDecoder 解码器的使用与源码解读
Netty是一个高性能的网络应用程序框架,它提供了丰富的功能,包括编解码器,这些编解码器用于在网络中发送和接收数据时进行数据的编码和解码。在Netty中,和功能是一个字符编码器,它将字符串(String)数据转换为字节数组(byte[])。用途:在网络通信中,数据传输是以字节流的形式进行的,因此,当需要发送文本数据时,需要将字符串转换为字节。就是执行这种转换的组件。工作方式:它使用指定的字符集(如UTF-8)将字符串编码为字节。功能。
2023-12-21 05:45:00 4708
原创 每日一博 - Protobuf vs. Protostuff:性能、易用性和适用场景分析
它是一个用于Java的库,旨在提供比原生Protobuf更简便的API,同时保持与Protobuf的兼容性。由于系统规模较大,性能的微小差异可能会在整个系统中累积,而Protobuf的静态定义和二进制格式在这方面可能更具优势。综上所述,Protostuff可以看作是在保持与Protobuf兼容性的同时,提供了更简便、直观的方式来处理数据序列化的Java库。由于系统规模相对较小,性能差异可能对整体系统影响较小,而Protostuff的动态特性和对POJO的直观支持可以提高开发效率和代码简洁性。
2023-12-20 22:15:00 4757
原创 Netty Review - ByteBuf 读写索引 详解
Netty的ByteBuf是一个强大的字节容器,用于处理字节数据。它提供了比Java标准库中的ByteBuffer更灵活和高效的方式来操作字节数据。Netty的ByteBuf是一个字节容器,它提供了一种更灵活和高效的方式来操作字节数据。与ByteBuffer不同,ByteBuf具有可扩展的缓冲区,可以动态调整容量,而不需要创建新的缓冲区对象。
2023-12-19 22:41:42 4261
原创 每日一博 - App key和App Secret
App Key和App Secret是API接口调用中常用的身份验证机制,确保只有合法的应用程序可以访问API。
2023-12-18 23:30:00 4354
原创 Linux - 非root用户使用systemctl管理服务
在目录下创建一个自定义的服务文件,例如。[Unit][Service][Install]请确保替换和your-group为实际的可执行文件路径、非root用户的用户名和用户组。
2023-12-18 22:00:00 7338
原创 计网 - TCP重传策略大揭秘:确保数据可靠传输的秘诀
在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。这些重传机制的引入旨在提高TCP协议在不同网络条件下的稳定性和性能。在复杂的网络环境中,数据包丢失是不可避免的。这些机制的选择取决于网络的特性和应用的需求。所以 TCP 针对数据包丢失的情况,会用。
2023-12-17 10:13:47 3877
原创 计网 - TCP四次挥手原理全曝光:深度解析与实战演示
从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。再来回顾下四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。是客户端的ip , 由此可知 这一次挥手是由 服务器 发起的。看之前再看一下这个图哈。
2023-12-14 21:15:00 4478
原创 计网 - TCP三次握手原理全曝光:深度解析与实战演示
第三次握手:客户端收到应答报文后,检查 ack 是否为 J+1,ACK 是否为 1,如果正确则将第三个报文标志位 ACK 置为 1,ack=K+1,并将该数据包发送给服务器端,服务器端检查 ack 是否为 K+1,ACK 是否为 1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED 状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。从这里我们可以看出,这是数据链路层相关的信息,source 部分的地址和机器上的mac 地址一模一样。我们用wireshark 抓一下。
2023-12-14 06:30:00 5482
原创 计网 - 一台主机上最多只能保持 65535 个TCP 连接吗
客户端应用程序完全可以不用自己设置端口号,而全权交给操作系统进行分配”,可用的端口号只有 6 万多,从这个角度考虑,客户端最多只能发起 6 万多条 TCP 连接。从 TCP 连接四元组来考虑:源 IP 地址、源端口、目的 IP 地址和目的端口,目的 IP 地址和目的端口指的是服务器的 IP 和端口,源 IP 地址、源端口自然就是客户端的。虽然客户端的 IP 和端口完全一样,但由于服务器侧的端口不同,所以仍然是两条不同的连接。是不变的,这样就只剩下源 IP 地址、源端口是可变的。
2023-12-13 21:15:00 4396
原创 计网 - 如何理解 Mac地址 、 IP地址 、端口号
Mac地址(Media Access Control Address)和IP地址(Internet Protocol Address)是计算机网络中两个不同的标识符,用于在网络中唯一标识设备。Mac地址是网络设备(如计算机、路由器、交换机)在数据链路层(OSI模型中的第二层)中的唯一标识符。长度为48位,通常以十六进制表示,由厂商分配给每个网络设备。用于在局域网中定位设备,是数据帧在局域网中传输时使用的地址。IP地址是在网络层(OSI模型中的第三层)上标识设备的地址。
2023-12-13 06:15:00 6545
原创 计网 - LVS 是如何直接基于 IP 层进行负载平衡调度
大致来说,可以这么理解(只是帮助我们理解,实际上肯定会有点出入),对于我们的 PC 机来说,物理层可以看成网卡,数据链路层可以看成网卡驱动程序,网络层和传输层由操作负责处理,应用层则是常用的一些网络应用程序和我们自己所编写的网络应用程序。为了确保数据包到达正确的后端服务器,LVS 修改数据包的目标 MAC 地址,将其设置为选定的后端服务器的 MAC 地址。负载均衡器收到后端服务器的响应后,将响应转发给发起请求的客户端。负载均衡器接收到客户端的请求后,根据调度器选择的后端服务器,将请求转发到相应的服务器。
2023-12-12 22:30:00 4754
原创 计网 - TCP扫盲
TCP是一种面向连接的协议,它提供可靠的、有序的数据传输。通过使用序列号、确认号、校验和等机制,TCP确保数据的完整性和正确性。它在IP协议的基础上,为应用程序提供了可靠的数据传输服务。
2023-12-12 20:45:00 4610
原创 每日一博 - Cache Miss Attack
在缓存管理中,“Cache Miss Attack” 是一个重要的问题. 说白了就是我们常说的【缓存穿透它指的是一种情况,即要获取的数据既不存在于数据库中,也没有被缓存。这会导致每个请求最终都会直接访问数据库,从而破坏了使用缓存的初衷。如果一个恶意用户发起大量针对这样的键的查询,数据库可能会很容易地被过载.更多可以访问我之前写的博客:深入理解分布式技术 - 探究缓存穿透、缓存击穿、缓存雪崩解决方案。
2023-12-11 21:15:00 4359
原创 计网 - 白话TCP 三次握手过程
每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务。我们需要知道TCP在网络OSI的七层模型中的第四层——Transport层 --------------- 第四层的数据叫SegmentIP在第三层——Network层 ---------------在第三层上的数据叫PacketARP在第二层——Data Link层,在第二层上的数据叫Frame。
2023-12-05 22:15:00 4882
原创 Netty Review - 探索Pipeline的Inbound和Outbound
在ChannelPipeline中,Outbound数据会从Pipeline的末尾开始,逆序经过Pipeline中的每个ChannelHandler进行处理,直到到达Pipeline的起始位置。在ChannelPipeline中,Inbound数据会依次经过Pipeline中的每个ChannelHandler进行处理,直到到达Pipeline的末尾。在Netty中,Inbound和Outbound是两个重要的概念,用于描述数据在ChannelPipeline中的流动方向。演示之前,我们先附一下代码。
2023-11-30 21:45:00 4772
X86-NFS rpm包
2020-11-24
中标龙芯-MIPS- NFS rpm包
2020-11-24
mybatisSource.zip
2020-06-14
apache-tomcat-8.5.50-src.zip
2020-06-02
「Tomcat源码剖析」.pdf
2020-06-01
Jest-5.3.4.zip
2020-01-19
Spring4CachingAnnotationsExample
2017-10-04
Java反编译工具
2015-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人