java教程技术文章
-
文章 · java教程 | 1星期前 | 消息队列 · Java · 事务 · 架构设计 · Spring Boot · spring boot 最终一致性 事务消息表 Outbox Pattern 订单通知
订单状态写入数据库后再发送通知,最容易出现数据库成功而消息丢失的窗口。本文用 Spring Boot 和 outbox_event 表,把业务写入与待发送事件放进同一个事务,再用独立发送器处理重试、幂等和失败回退。498 收藏 -
虚拟线程适合大量阻塞型任务,但它不会自动增加数据库连接等稀缺资源。本文从读者提问出发,说明虚拟线程不该再被线程池复用,连接池本身的并发边界,以及何时应使用 Semaphore。430 收藏 -
Java 8 应用升级到 Java 21,真正容易卡住的不是语法,而是 JAXB 缺失、强封装反射和默认字符集变化。本文用一套可复用的检查顺序,把编译、启动和回归验证串起来。425 收藏 -
文章 · java教程 | 2星期前 | Java · 后端开发 · 批处理 · Stream API · JDK 24 · Gatherers · 分组 Java 24 Stream Gatherers windowFixed Stream.gather 批量接口
批量同步订单或调用外部接口时,手写 subList 循环容易把边界、尾批和调用节奏揉在一起。Java 24 正式提供 Stream Gatherers 后,可以用 gather(windowFixed(n)) 把元素按固定数量组成批次,再把网络调用放在流外逐批处理。本文给出最小写法、尾批语义、旧方案对比和 JDK 版本边界。411 收藏 -
文章 · java教程 | 2星期前 | 事务 · spring · aop · Java教程 · Transactional · 排错 · java Spring 事务失效 @Transactional AOP代理 同类方法调用 订单创建
Spring 服务里一个带 @Transactional 的方法被同类普通方法直接调用时,事务可能没有开启。以订单创建与库存扣减场景为例,本文说明代理边界、日志验证、拆分服务的稳妥修法,以及哪些替代写法不适合长期使用。406 收藏 -
Java 25 把紧凑对象头从实验能力变成产品能力,但它不是所有服务都应立即打开的开关。本文用对象数量、堆占用、GC 次数和锁竞争四个观察点,说明它节省了什么、可能影响什么,以及如何在生产环境做小范围验证。394 收藏 -
文章 · java教程 | 1星期前 | 文件处理 · 配置管理 · Java · 命令行工具 · nio · Java Files.mismatch 配置目录校验 Files.mismatch Java文件对比
部署前想确认两份配置目录是否完全一致,不必先引入第三方 diff 库。本文用 Java NIO 的 Files.mismatch 做一个小型目录核对工具,处理参数校验、相对路径、二进制差异、报告输出和退出状态,最后给出可复查的本地运行方式。371 收藏 -
支付请求交给 Java CompletableFuture 后,超时不等于扣款失败,直接重试可能造成重复扣款。本文用幂等键、任务状态表、超时收口和延迟重试搭出一条可核对的处理链,并补上失败通知与人工复核边界。352 收藏 -
文章 · java教程 | 3星期前 | 调试 · 异常处理 · Java教程 · try-with-resources · AutoCloseable · 文件关闭 AutoCloseable Java教程 Java try-with-resources suppressed exceptions
Java 的 try-with-resources 会自动关闭资源;当业务代码和 close 同时抛异常时,关闭异常会作为 suppressed exception 保留。本文给出排查文件、JDBC 和网络资源关闭问题的检查清单。327 收藏 -
文章 · java教程 | 2星期前 | Java · 文件上传 · spring · nio · 后端开发 · java 文件上传 临时文件 数据清理 MultipartFile Files.move
处理 MultipartFile 时,不要把客户端文件名直接拼进持久路径。把上传数据按校验、临时落盘、确认移动和失败清理分段处理,既能缩小异常影响范围,也能避免临时目录长期堆积。314 收藏 -
文章 · java教程 | 2星期前 | Java · HTTP · ndjson · httpclient · 性能实践 · 流式读取 背压 Java HttpClient NDJSON BodyHandlers.ofLines
Java HttpClient 读取 NDJSON 时,先用 BodyHandlers.ofLines() 把响应转成逐行流,再在消费端做字段校验、数量上限和超时收尾。本文用订单事件流说明连接关闭、异常中断与消费速度不匹配时的处理边界。309 收藏 -
Java 后端接口调用远程服务时,不能只把同步等待套进 CompletableFuture 就结束,还要处理超时、兜底值和异常记录。本文用一个小实验演示 supplyAsync、orTimeout、completeOnTimeout 和 join 的组合写法,让页面在远程接口变慢时仍能给出可控响应。304 收藏 -
Java 批量任务平台遇到大客户集中提交时,不能只靠扩大线程数。本文用队列分片、租户并发配额、全局资源预算和可恢复回压,把慢租户与正常租户隔开,并给出可验证的 Java 实现骨架。300 收藏 -
Java 25 将 ScopedValue 正式纳入平台 API,适合在一次请求的调用链里传递不会被中途修改的 requestId、租户和权限快照。本文用虚拟线程示例对比 ThreadLocal,给出最小写法、边界和迁移判断。284 收藏 -
StampedLock 的乐观读不是无锁读取。本文用一个读多写少的库存快照示例,对比 ReentrantReadWriteLock 与 StampedLock,说明 validate、回退读锁、写锁转换和中断边界,帮助你决定是否值得替换现有锁。264 收藏