- 博客(250)
- 资源 (50)
- 问答 (1)
- 收藏
- 关注
原创 那些年,我们写过的低级BUG,警钟长鸣
看下这段代码有哪些问题:public static MultiPriceInfo getMultiPriceInfo(List<MultiPriceInfo> multiPriceInfos, String code) { if(CollectionUtils.isEmpty(multiPriceInfos)){ return null; } for(MultiPriceInfo priceInfo : multiPric
2020-10-29 14:43:10
948
1
原创 JPA/Hibernate中一对一关联时不持有外键方的属性延迟加载为什么不生效?
也查出来,虽然我们这里配置了延迟加载。,但是实际查询的时候,还是把。现在有一个需求,要根据。
2026-04-10 19:49:20
55
原创 SpringBoot如何对三方JAR包中的类做JSR-303参数校验?
这个方法需要接收分页参数,但是分页参数是在一个公共的DTO中定义的,并且没有添加参数校验相关的注解,在不修改源码的情况下,如何对这个类做参数校验呢?完整的源码下载请关注公众号“
2026-04-08 17:49:49
52
原创 Spring的@Cacheable在@PostConstruct中调用为啥会不生效?
这不就是面试官喜欢问的Spring Bean的生命周期吗?测试代码下载请关注公众号“爪哇优太儿”回复“Cache。
2026-04-02 09:04:47
258
原创 什么是JPA/Hibernate的N+1查询问题?如何解决?
N+1 查询 是 Hibernate 中因懒加载 + 循环访问关联属性导致的大量低效 SQL。通过 预抓取(join fetch / EntityGraph 即可解决。在开发中建议开启 SQL 日志,发现循环查询时及时优化。完整的源码下载请关注公众号“爪哇优太儿”发送消息JPA。
2026-03-31 13:19:12
63
原创 SpringBoot4+Kafka4 - 生产环境故障 - 消费者执行时间太长导致消息无限循环投递
在我们的场景中,单个消费者的处理时间会比较长,恰好最近因为某些操作导致消息数量忽然增加,导致一次poll()出来的消息数量比较多,在5分钟以内没有处理完所有的消息,然后发生了rebalance,导致无限循环。大概的意思是consumer处理poll()出来的消息时间太长导致超时了,然后消费者被认为是挂掉了,发生了rebalance,然后消息重新投递了回来。因为定时扫库的任务中有动态开关,第一时间就把开关关掉了。按道理说,就不应该再有消息发出来,但是consumer还在不停的消费消息,那么这些消息是哪来的?
2026-03-24 09:07:51
317
1
原创 SpringBoot4.0集成Kafka4-消费者如何提交偏移量Offset
比如我们想改成@Bean此时,每隔5秒消息就会重新投递过来一次。更多文章请关注公众号“爪哇优太儿”
2026-03-10 14:02:08
370
原创 SpringBoot4.0集成Kafka4-生产者重试
这种类型的错误需要首先刷新元数据,然后才能知道是否可重试,发生这种类型的错误以后,producer首先会去重试获取元数据,如果元数据一直获取失败就会一直不停的重试获取元数据。可重试错误是指那些由于系统临时状态导致、在重试后有可能会成功的错误。生产者发送消息可能会遇到3种不同类型的错误:可重试错误、不可重试错误、刷新元数据后再重试的错误。Kafka认为简单的重试并不会导致消息发送成功,比如: Topic不存在或名称非法导致的。只有可重试类型的错误才支持重试设置,对于其他类型的错误重试设置无效。
2026-03-04 09:02:34
355
原创 SpringBoot4.0集成Kafka4-收发POJO消息
我们要实现的效果是,发送消息的时候,直接发送。中的案例使用的是starte内置的。对象,接收消息的时候直接接收。完整的源码下载请关注公众号“类型,那能不能直接收发。,收发消息的类型都是。
2026-02-11 17:34:55
214
原创 SpringBoot4.0集成Kafka4快速入门
kafka的管理工具有很多,比如:Kafka UI、Kafdrop等,这里我们选择Kafka UI,它是一个SpringBoot的应用,易用且功能全面。,只需要设置broker的地址和消费者所属的组即可进行消息的收发,显然比之前的老版本更简单了。新版的kafka不再依赖zookeeper。的key和value的序列化器。
2026-02-09 08:53:19
677
1
原创 SpringBoot4.0新特性-Observability让生产环境更易于观测
用来提供可观测性支持,而无需借助Actuator。它的核心优势在于原生支持OTLP协议,虽然其内部使用 Micrometer,但所有数据都通过 OTLP 协议导出至任何兼容的后端系统。应用的可观测性是指从应用外部来观察运行中系统的内部状态的能力,它由三大支柱构成:日志记录。SpringBoot应用使用OTLP协议上传指标、链路、日志数据给。SpringBoot4.0提供了全新的。更多细节请关注公众号“爪哇优太儿”。对外提供统一的UI展示。
2026-02-06 13:10:33
283
原创 SpringBoot4.0新特性-Null-safety消灭空指针
该机制的核心目标就是通过在编译时进行静态代码检查,防止运行时抛出空指针异常。SpringBoot4.0默认集成JSpecify框架,支持使用JSpecify注解来声明API、字段及相关类型的可空性。大多数情况下,我们一般默认这些参数、返回、字段、类型都是非空的,因此只需要明确的说明可空即可,因此我们还可以在包级别统一设置默认的可空性,这个可以借助。我们想要在编译期就能表达:入参不允许为null,返回允许为null,该如何来做呢?具体来说可以有两种方式,显式设置和隐式统一设置。此时,就可以删除代码中的。
2026-02-04 12:53:00
291
原创 SpringBoot4.0新特性-Resilience之并发限制
我们讲了失败重试,本篇我们继续来看另一个新特性 -并发限制,简单的说,它可以限制方法的并发访问数。
2026-01-27 09:15:13
474
原创 JDK25的虚拟线程还存在Pinning问题吗?
JDK21引入了虚拟线程,但是很多场景都会导致平台线程被虚拟线程Pin住从而导致虚拟线程无法卸载,连最常用的。都会Pin住底层的平台线程,这大大的降低了虚拟线程的可用性。问题是,现在都JDK25了,的Pinned问题还存在吗?
2026-01-27 09:10:34
62
原创 SpringBoot4.0新特性-BeanRegistrar
它是以编程方式根据条件动态做Bean的注入,并且可以一次注入多个Bean。Spring 7.0引入了一种新的更方便更灵活的注册Bean的方式-现在想实现:如果是生产环境就启用。测试不同的输出情况。
2026-01-26 09:54:10
60
原创 SpringBoot4.0新特性-Resilience之失败重试
从Spring7.0版本开始,Spring Framework核心模块已经集成了常用Resilience相关功能,主要包括了对方法调用的失败重试支持以及并发控制支持。SpringBoot 4.0默认的Spring的版本就是Spring 7.0, 因此SpringBoot 4.0自然也就具有了这些特性。本文先来学习下失败重试,下一篇再来学习并发控制。
2026-01-23 09:16:38
135
原创 SpringBoot4.0新特性-声明式HTTP远程调用客户端基础篇
对应于,说明这个是Rest客户端, url可以设置服务的地址,当然base-url部分也可以用其他方式来指定,稍后会说明:对应GetMapping,说明这个是GET请求,聪明的你一定可以想到还会有对应的等。:就是路径参数,传参这一部分跟Controller的传参是一模一样的。
2026-01-21 09:10:41
614
1
原创 SpringBoot4.0新特性-API版本管理进阶篇
前一篇文章中我们介绍了在SpringBoot4.0中API版本管理的基本用法,但是有时候我们的项目中可能会有这样的需求,比如:对于老的1.0版本走一个老的接口,对于1.1及以上的版本走新的接口,这样的需求又该如何来实现呢?如果有多个接口都能满足请求的版本号,这个时候系统应该如何选择呢?
2026-01-20 09:14:35
201
原创 SpringBoot4.0新特性-API版本管理基础篇
API 版本管理是后端开发中一个棘手但又无法回避的问题,尤其是在移动端开发中更为明显。现在,SpringBoot4.0 为 SpringMVC 和 WebFlux 提供了原生的 API 版本控制支持。媒体类型版本控制:通过媒体类型来指定版本策略,比如:Accept: application/json;查询参数版本控制:通过查询参数指定版本,比如/api/orders?URI版本控制:在URL路径中添加版本,比如/api/v1/orders。请求头版本控制:通过自定义请求头来指定版本。
2026-01-16 14:11:02
177
原创 Jackson Mixin 详解
Mixin 是 Jackson 提供的一种机制,允许你在不修改原始类源码的情况下,为其添加或覆盖 Jackson 注解。它通过"混入"的方式,将注解逻辑与实体类定义分离。核心概念分离关注点:序列化规则与领域模型分离无侵入式:不需要修改原始类,适用于第三方库的类运行时绑定:在 ObjectMapper 级别配置,不影响类本身。
2025-11-26 14:09:52
484
原创 Slf4j打印异常堆栈的正确姿势
Slf4j打印日志的时候,如果最后一个参数是 Throwable 时可省略占位符。Logback、Log4j2、JUL 绑定都遵循此规则。
2025-10-16 13:51:35
266
原创 spring-kafka的消息拦截器RecordInterceptor
KafkaClients提供了可以在消费消息之前对消息进行拦截,Spring-Kafka对消费拦截器做了增强,新提供了一个与之类似的,我们还是以传递TraceId来看下具体的使用方法。
2025-09-16 16:16:05
428
原创 spring-kafka的消息过滤器RecordFilterStrategy
运行机制:Spring Kafka的监听器容器(如ConcurrentMessageListenerContainer)poll()到消息以后,为每条消息创建一个ConsumerRecord并封装成Message,在调用@KafkaListener的方法之前,容器会先检查是否配置了RecordFilterStrategy,RecordFilterStrategy 的 filter 方法被调用,如果返回true,就不会调用listener。Offset的提交与消息的处理结果(包括被过滤) 是同步的。
2025-09-16 11:40:03
1008
原创 Kafka如何配置生产者拦截器和消费者拦截器
生产者拦截器:在消息序列化和分区之前(onSend)以及确认之后(onAcknowledgement)调用。消费者拦截器:在消息反序列化之后、返回给用户之前(onConsume)以及提交偏移量之后(onCommit)调用。
2025-09-13 14:58:13
621
原创 Spring Boot如何配置Liveness和Readiness探针
当我们采用Kubernetes作为编排平台时,每个Pod节点上的kubelet都负责维持该节点内Pod的健康状态。例如,某些应用程序在启动后可能需要短暂准备时间才能开始接收请求。kubelet可以确保只有当应用准备就绪时才会向其转发流量。此外,如果Pod的主进程因任何意外原因崩溃,kubelet将自动重启容器。为履行这些职责,Kubernetes提供了两种健康检查机制:存活探针(liveness probes)和就绪探针(readiness probes)。
2025-08-20 16:25:47
819
原创 JDK的Stream API使用详解
把流中的元素收集到一个容器中去,比如:List、Set、Map、StringBuilder、StringJoiner等。primitiveStream.mapToObj(IntFunction) 转化成其他类型的流。stream.mapToInt(ToIntFunction)其他类型的流转化成基本类型流。注意:流只能遍历一次,就跟水从水管中流过一样,不能重复再从头遍历。primitiveStream.boxed() 转化成包装类型流。不利用已有的对象,而是利用某些规则去生成流中的元素。
2025-07-12 18:03:31
1088
原创 JDK的Closure闭包详解
闭包是指一个函数(或方法)能够访问并记住其词法作用域(lexical scope)中的变量,即使该函数在其原始作用域之外执行。可以捕获外部作用域的变量保持这些变量的生命周期即使外部方法执行完毕,闭包仍可访问这些变量。
2025-07-10 20:38:54
662
原创 JDK中Lambda表达式的内部运行原理解析
从字节码中我们可以看到,java编译器在编译这个源代码的时候,自动帮我们生成了一个 private static的名字叫lambda$main$0,参数是String.class返回是Integer.class的一个方法,方法中干的事情就是跟lambda表达式是一样的,调用String.length()方法,返回Integer的长度。lambda表达式实际上也是普通的类中的方法的调用,只不过,这个类是运行时动态生成的,方法是编译器在编译期动态生成的。首先,我们来下一个简单的lambda表达式的demo。
2025-07-06 19:01:03
345
原创 openapi-generator-maven-plugin自动生成HTTP远程调用客户端
Java开发中调用http接口的时候,有很多可选的技术方案,比如:HttpURLConnection、RestTemplate、WebClient、Feign、Retrofit、Okhttp等,今天我们来看一个更优的技术方案OpenAPI Generator(http://openapi-generator.tech/)
2025-06-22 14:58:23
1413
原创 SpringBoot实现简单的API代理服务器
提供一个API代理服务,前端访问的时候,添加统一的前缀比如/api进入代理服务的ApiController,ApiController需要识别出来这个请求要访问的是哪一个后端服务,在SpringCloud中我们可以借助Nacos来做,现在只能手动做配置,把服务名追加到url中。当ApiController收到请求的时候,首先从url中解析出来服务名,然后根据服务名查询配置文件找到实际的后端要访问的服务地址,拼接上url中剩余部分作为实际要转发的url,转发请求,返回响应。得到真正要访问的url是。
2025-05-15 10:23:47
767
原创 SpringBoot配置项名与Java属性名的映射规则
来自properties、yml、system property的属性,不管是snake_case还是kebab-case风格,最终都是转化成camelCase。来自OS环境变量的属性,仅支持UPPER_SNAKE转camelCase。
2025-04-27 11:04:43
527
原创 Cannot find module @rollup/rollup-win32-x64-msvc
【代码】Cannot find module ‘@rollup/rollup-win32-x64-msvc‘
2025-03-20 11:26:22
1329
原创 mapstruct入门
只需要在接口上添加@Mapper注解即可,mapstruct会创建一个具有相同方法的实现类,并自动生成所有的setter和getter.@Mapper.builder().build();
2025-01-27 11:05:50
579
原创 Mockito快速入门
SpringBootTest注解来加载整个Spring应用上下文, @MockBean@SpyBean注解用于在Spring应用上下文中注入一个模拟的Bean,它将在测试开始时自动添加到Spring应用上下文中。除了 mock()/@Mock,还可使用 spy()/@Spy,两者区别是 spy 是部分mock,如果不打桩,则执行的是真实的方法。@Mock 是 Mockito 中用的最多的注解,我们用它来创建并注入mock对象,而不用手动调用 Mockito.mock 方法。也可以使用 @Mock 注解。
2025-01-23 13:50:38
1298
原创 gRPC-集成Springboot
服务端首先添加相关依赖:添加相关的配置服务端service代码:客户端添加依赖添加配置客户端调用:完整的源码下载:https://github.com/xjs1919/learning-demo/tree/master/grpc-demo
2024-11-04 16:37:04
613
1
前面部分可以编辑后面部分不可编辑的EditText
2014-02-25
Android-部分可编辑的EditText
2014-02-20
SharedPreferences帮助类
2013-12-31
Android-从页面右侧滑出通讯录
2014-02-22
ListView后台更新报错:java.lang.IllegalStateException
2013-12-13
Android-用ListView模仿ExpandableListView
2014-08-01
Android-Popupwindow和Dialog做弹出窗口
2014-05-04
Android-异步图片加载器
2014-05-09
Android-网络通信框架Volley使用详解
2014-03-12
Android-maven配置multidex打包
2014-12-18
maven+spring+mybatis配置
2015-12-17
Android-对ListView的Adapter的一种简单封装
2015-07-24
Android-加速传感器或者OrientationEventListener做横竖屏切换
2015-08-13
Android日期时间选择控件
2015-08-12
Nginx安装配置
2017-10-13
求一简单的正则表达式,用来验证用户的密码
2013-04-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅