自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OceanSky的专栏

好记性不如烂笔头,内存虽快,但不持久

  • 博客(730)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 RabbitMQ学习笔记:集群和网络分区(Network Partitions)

集群成员之间的网络连接故障会影响客户机操作的数据一致性和可用性(如CAP定理)。由于不同的应用程序对一致性有不同的要求,并且对不可用性的容忍程度不同,所以可以使用不同的的分区处理策略。1.检测网络分区如果一个节点在一段时间内(默认是60秒)无法与对等端节点联系,则节点将认为其对等节点是否已关闭。如果两个节点重新接触,都认为另一个已关闭,则这些节点将确定已发生分区。将以如下形式记录到RabbitMQ日志:2020-05-18 06:55:37.324 [error] <0.341.0> .

2020-07-13 15:13:41 3769 1

原创 RabbitMQ学习笔记:RabbitMQ延迟队列(DLX、TTL及rabbitmq_delayed_message_exchange插件)

延迟队列存储的对象是对应的延迟消息,所谓的延迟消息是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。延迟消息使用的场景有很多,比如:在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行异常处理,这时候就可以使用延迟队列来处理这些订单了。用户希望通过手机远程遥控家里的智能设备在指定...

2020-01-03 13:51:01 15681 10

原创 RabbitMQ学习笔记:CentOS7中安装RabbitMQ集群

安装rabbitmq的前提是 在CentOS7中,如果是在docker中安装,需要先创建镜像docker pull centos:7创建CentOS7服务器centos7docker run -itd --hostname rabbit1 --name centos7 -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 25672:25672 cen......

2019-11-28 19:28:02 4793

原创 RabbitMQ学习笔记:使用Docker部署RabbitMQ集群

RabbitMQ本身是基于Erlang编写,Erlang语言天生具备分布式、高并发的特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天生支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过Zookeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞...

2019-11-05 19:18:58 9513

原创 springboot请求入参重复读问题ContentCachingRequestWrapper

其用于缓存所有从input stream和reader读取的内容,并且允许这些内容通过字节数组存储;此类扮演了拦截器的角色来缓存请求内容,如果请求内容没有被消费,则请求内容将不会被缓存,并且通过getContentAsByteArray()获取不到请求内容;此类是HttpServletRequest的子类,提供了HttpServletRequest接口的边界实现,开发人员可以根据自己的需要实现此包装类的具体方法。ContentCachingResponseWrapper是读响应数据进行缓存。

2024-12-03 19:08:46 904

原创 LuaJava

LuaJava是一个Java脚本工具。该工具的目标是允许用Lua编写的脚本操纵用 Java开发的组件。LuaJava允许使用与访问Lua的本机对象相同的语法从Lua访问Java组件,而不需要任何声明或任何类型的预处理。LuaJava还允许在Lua中实现任何Java接口,并将其作为参数传递给任何方法,当调用时,Lua中将调动等效函数,并将结果传递会Java。LuaJava与Lua5.1的许可证相同,也就是说,它可以免费用于学术和商业目的。

2024-12-03 19:05:38 875

原创 Java11使用JVM同一日志框架启用日志记录

你可以使用-Xlog选项配置或启用Java虚拟机同一日志框架的日志记录。

2024-12-03 19:04:06 905

原创 spring通过RequestContextHolder获取HttpServletRequest对象

OncePerRequestFilter是Spring框架中一个抽象类,用于确保过滤器在每次请求中只通过一次,这是通过重写doFilterInternal方法来实现的,而不是通过重写doFilter方法。OncePerRequestFilter通过Spring的过滤器链管理来确保这一点。RequestContextHolder类中全部是静态方法,可以直接使用设置属性、清空属性相关方法;

2024-12-03 19:02:03 736

原创 knife4j+springboot3.4异常无法正确展示文档

通过分析异常日志发现是ControllerAdviceBean类报错,在springboot3.3.5时spring-web版本是6.1.14,springboot3.4版本是6.2.0版本。结论:期待knife4j-openapi3-jakarta-spring-boot-starter早日升级,兼容最新版本的spring;通过http://ip:port/doc.html访问接口文档发现访问/v3/api-docs接口时报。此类中的构造函数已经变更为4个,已经不存在一个参数的构造函数了。

2024-12-03 18:59:17 2105 6

原创 配置websocket消息代理类AbstractBrokerRegistration

在Spring Framework的Spring Messaging和Spring WebSocket模块中,StompBrokerRelayRegistration、SimpleBrokerRegistration和AbstractBrokerRegistration是用于配置WebSocket消息代理(broker)的关键类。这些类通常在配置WebSocket消息代理时通过Java配置或XML配置被使用。

2024-10-21 18:59:54 678

原创 springboot接口Get请求实体类入参

在springboot中,对HTTP GET请求,通常不会降请求体(body)作为主要的数据传输方式,因为GET请求通常用于请求数据,而不是发送数据到服务器(尽管从技术上讲,GET请求可以包含请求体,单这并不常见,也不符合RESTful API的设计原则)。因此,对于GET请求的入参,通常不会使用@RequestBody注解。

2024-10-21 18:55:56 1443

原创 @MassageMapping和@SendTo注解详解

MessageMapping注解是Spring Framework中用于WebSocket消息处理的注解,它用于将特定的消息路径映射到处理器方法上。@SendTo注解指定了相应消息应该被发送到的目的地路径。

2024-10-21 18:54:02 650

原创 The Simple Text Oriented Messaging Protocol(STOMP)

CONNECTSENDSUBSCRIBEBEGINCOMMITABORTACTNACKDISCONNECT客户端和服务器之间的通信是通过由多条组成的“框架”进行的。第一行包含命令,后面是:格式的标题(每行一个),后面是空行,然后是正文内容,以空字符结尾。服务器和客户端之间的通信是通过MESSAGE、RECEIPT或ERROR帧进行的,这些帧具有类似的标头和正文内容格式。

2024-10-17 19:03:32 739

原创 Field injection is not recommended – Spring IOC

在运行静态代码分析工具或从IDE检查/分析代码时,你可能会遇到以下关于@Autowired字段的警告:Field injection is not recommended。

2024-10-17 19:01:12 646

原创 redis-cli执行lua脚本

key和参数通过逗号分割,逗号前后必须有一个空格。

2024-10-11 19:02:05 706

原创 什么是SQLite?

SQLite是一个进程内的软件库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其它数据库,SQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite直接访问其存储文件。二、为什么要用SQLite?不需要一个单独的进程或操作系统(无服务器的);不需要配置,这意味着不需要安装或管理(零配置的);一个完整的SQLite数据库是存储在一个单一的跨平台的磁盘文件;

2024-10-11 19:00:39 1055

原创 Java反射机制中UndeclaredThrowableException异常

在Java中UndeclaredThrowableException是Java反射机制中使用的一个特殊异常类,通常与InvocationHandler接口一起使用,在通过反射调用方法时,如果方法声明抛出了受检查异常(checked exception),但是在方法上并没有声明抛出的这些异常,那么就会抛出UndeclaredThrowableException异常。这个异常包装了实际发生的受检异常,使其可以作为一个非受检异常(unchecked exception)被抛出。

2024-09-24 19:35:17 714

原创 Spring Shell基于注解定义命令

默认情况下,命令根据其实现的类进行分组,将驼峰类名转换为单独的单词。可以通过如下方式指定分组(优先级按照说明顺序)

2024-09-24 19:33:19 289

原创 搭建第一个Spring Shell案例

Spring Shell允许您创建这样一个可运行的应用程序,用户可以在其中输入文本命令,这些命令将一直运行,直到程序终止。Spring Shell项目提供了创建这样一个REPL(Read, Eval, Print Loop)应用程序的基础设施,让你可以通过使用熟悉的Spring编程模型专注于实现命令。为了了解spring shell提供了什么,我们可以编写一个简单的hello world shell应用程序,它有一个简单的参数。这意味值需要启用InteractiveShellRunner才能获取REPL。

2024-09-23 19:08:28 574

原创 Spring Boot CLI命令行工具

Spring Boot CLI适应各命令行工具,你可以使用它快速创建spring项目,通常我们都是使用idea等工具来创建项目,用不到CLI,但这提供了一种在没有IDE的情况下快速创建启动spring应用的方法。示例创建项目my-project,默认gradle依赖spring-boot-starter-web和spring-boot-starter-data-jpa。

2024-09-23 19:06:55 886

原创 SDKMAN!关联已安装JDK

【代码】SDKMAN!关联已安装JDK。

2024-09-19 19:21:16 745

原创 SDKMAN!安装Maven

注意关联的时候定义的版本不要跟sdk list maven中展示的版本重复,否则不生效,上述我就重新命名了版本;另外环境变量配置要去掉,如.bash_profile文件中的配置,否则不生效;查看当前所有管理的服务默认版本。

2024-09-19 19:19:44 742

原创 SDKMAN!软件开发工具包管理器

认识一下SDKMAN!想象一下,有不同版本的SDK,需要一种无感知的方式在它们之间切换。其前身为GVM,Groovy环境管理器,SDKMAN从apt、pip、rvm、rbenv甚至Git等熟悉的工具中汲取灵感。自身的,而force参数确保即使在检查到没有新版本时也会执行更新操作。的临时目录.sdkman/tmp,如果手动移除可能会破坏SDKMAN!选择将指定的版本设置为默认的版本,这将确保所有后续shell都将使用3.6.3版本。在当前命令行终端指定使用版本,要注意,这将键切换当前shell的候选版本。

2024-09-18 19:38:36 645

原创 Mybatis中sql数组为空判断

上述示例只能判断arrays数组不为null,那如果是个空数组呢。二、Mybatis xml中的sql通过if语句判定数组非空数组。

2024-09-18 19:36:32 1566

原创 Maven项目中dependencyManagement(BOM)和pluginManagement作用

在Maven项目中dependencyManagement用于定义BOM(Bill Of Materials)物料清单,pluginManagement用于maven插件定义。

2024-09-10 19:09:58 509

原创 spring-boot-maven-plugin插件

spring-boot-maven-plugin插件对Apache Maven提供Spring Boot支持,它允许你在运行集成测试之前打包可执行jar或war文件目录,运行spring boot应用程序,生成构建信息并启动spring boot应用。Maven版本必须是3.6.3或更高版本。

2024-09-10 19:08:00 3258

原创 Spring Cloud OpenFeign 4组件

核心初始化类:FeignClientFactoryBean、FeignAutoConfiguration、FeignClientsConfiguration、HttpClient5FeignConfiguration。Client的默认实现类是feign.hc5.ApacheHttp5Client。请求url如:api/feign/test/myname,key1=value1a,value1b;RequestInterceptor和ResponseInterceptor如何初始化。

2024-09-05 19:09:03 1175

原创 Bill of Materials (BOM) POMs

Bill of Materials (BOM)物料清单,实际上就是一个普通的pom文件,在pom文件中只定义dependencyManagement版本依赖管理,用于管理项目依赖的所有jar包;有利于包版本的统一,降低由于版本不一致导致的冲突;有利于降低配置的复杂度,提升开发效率。个人开源SDK

2024-09-05 19:07:08 1021

原创 Maven持续集成(Continuous integration,简称CI)版本友好管理

从Maven 3.5.0-beta-1 版本开始可以在pom文件中使用revision{sha1}、${changelist}做为版本的占位符。

2024-09-03 19:35:22 943

原创 RedisCache存入redis的数据key为何name和id的分隔符是两个冒号::

Redis Cache缓存数据生成的key是由两部分组成,cacheNames和+d或者自定义生成方案,如果采用cacheNames+id方案则会在中间添加两个冒号::,这样使用工具查看的时候感觉怪怪的,今天我们就探讨下具体生成原因。

2024-09-03 19:31:28 576

原创 Redis的KeyExpirationEventMessageListener键过期监听器

MessageListener通过监听key过期的Redis keyspace通知,然后通过ApplicationEventPublisher发布RedisKeyExpiredEvent事件的模式进行事件监听和广播。

2024-09-02 19:47:33 1520

原创 Redis发布订阅PUB/SUB

Redis发布订阅PUB/SUB是一种消息通信模式,发送者PUB发送消息,订阅者SUB接收消息。Redis客户端可以订阅任意数量的频道,一个通道CHANNEL可以被多个客户端订阅,当一条消息发送到CHANNEL中去后所有订阅的客户端都会接收到此消息。

2024-09-02 19:46:01 650

原创 RedisMessageListenerContainer容器初始化

RedisMessageListenerContainer是Spring Data Redis提供的一个容器类,为Redis监听器提供异步处理能力,处理低级别消息、转换Redis的消息通道,它通常与MessageListenerAdapter和自定义的消息监听器一起使用。

2024-08-29 19:29:50 1289

原创 Spring框架中PathMatchingResourcePatternResolver解析资源路径并匹配资源模式

PathMatchingResourcePatternResolver是Spring框架中用于解析资源路径并匹配资源模式的一个工具类。它常用于在Spring的上下文中加载资源,如:配置文件、类路径下的文件加载等。PathMatchingResourcePatternResolver是一个Ant模式通配符的Resource查找器,可以用来查找类路径下或者文件系统中的资源获取文件系统文件。PathMatchingResourcePatternResolver位于spring-core包之中。

2024-08-29 19:27:30 1089

原创 spring-data-redis中RedisRepository仓储

Id@RedisHash注解的value属性和@Id注解指定键值的命名空间,组合成user:id;@RedisHash的属性timeToLive属性指定键值的超时时间。CrudRepository接口中默认定义实现了save、saveAll、findById、existsById、findAll、findAllById、count、deleteById、delete、deleteAllById、deleteAll等方法,基本满足了对redis操作的需求;如果有特殊需求可以自定义实现。

2024-08-27 19:04:13 1189

原创 springboot故障分析FailureAnalyzer

org.springframework.boot.diagnostics.FailureAnalyzer是springboot框架中的一个接口,用于为应用程序启动失败提供详细的诊断报告。当springboot应用程序无法正常启动时,springboot会尝试查找一个或多个实现了FailureAnalyzer接口的类,以提供关于失败原因的详细信息。

2024-08-27 19:02:24 689

原创 【Java的package-info.java文件支持

package-info.java的用途,简单地说,package-info是一个java文件,可以添加到任何Java包中。package-info.java文件目前有两个用途,包级文档的存放位置、包级别注释的存放位置,除了这两点外还可以根据需要扩展用例。将来如果需要添加任何包级别的功能,此文件将是一个完美的位置。

2024-08-27 19:00:38 213

原创 spring-boot-starter-data-redis是否支持reactive响应式编程

spring-boot-starter-data-redis-reactive: 使用响应式编程模型,在响应式编程中,你的操作是异步的,并且基于事件驱动;你可以继续处理其他的事情,而不必等待Redis操作完成;当Redis操作完成时,结果会被发送到一个回调函数或订阅者。spring-boot-starter-data-redis: 使用传统的基于阻塞的I/O编程模型,这意味着当你调用Redis操作时,线程将会被阻塞,知道操作完成,这在高并发场景下可能会导致线程资源的良费和响应时间的增加。

2024-06-29 15:28:17 878

原创 spring如何给bean动态取不同的别名

spring、springboot向容器中注入bean的时候一般情况下只有一个别名,在某些特殊场景需要指定多个别名。

2024-06-29 10:11:33 1045

原创 spring-boot-configuration-processor注释处理器

spring-boot-configuration-processor是springboot提供的一个注释处理器(annotation processor),它用于在编译时生成元数据文件(META-INF/spring-configuration-metadata.json),该文件描述了你的配置属性,以便为开发者提供自动补全和文档支持。生成的元数据文件可以被 IDE(如 IntelliJ IDEA 或 Visual Studio Code)的 Spring Boot 插件使用,以提供自动补全和文档支持。

2024-06-29 10:09:55 1343

eclipse-class-decompiler-update_v2.10.0.zip

该反编译工具支持spring tool suite 在mac上反编译class文件,

2017-09-30

struts2.3.4

标准的struts2.3.4APIchm文档,该文档是中文版

2013-06-21

JDK_API_1.6英文版

全面的java开发必备的英文版API文档

2013-03-07

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

TA关注的人

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