Spring Boot

搜索结果

在博客中搜索相关文章

79 篇文章 7

Seata分布式事务:Java微服务架构下的“数据一致性”通关指南

Seata 通过事务协调器(TC)、事务管理器(TM)和资源管理器(RM)实现微服务间的全局事务,解决跨服务的数据一致性问题。文章先分析传统 XA、TCC、消息表等方案的性能与实现缺陷,随后介绍 Seata 三种主流模式:AT 通过自动生成回滚日志实现零代码侵入,适用于大多数关系型业务;TCC 采用 Try‑Confirm‑Cancel 手动补偿,支持非关系型资源并要求幂等、防悬挂;Saga 采用正向+补偿链式执行,适合长事务场景。随后给出基于 Spring Boot 的实战步骤、配置要点以及 XID 传播方式,并提供 TC 高可用、事务日志存储、常见坑点的防范建议,帮助 Java 开发者在生产环境安全、快速落地分布式事务。

Spring WebFlux响应式编程实战指南

随着微服务对高并发、低延迟的需求提升,传统Spring MVC的同步阻塞模型因线程耗尽和上下文切换导致性能瓶颈。文章阐述了响应式编程的优势——事件驱动、背压机制以及少量线程高效利用,并通过Project Reactor 的 Flux、Mono、操作符和 Subscriber 介绍其核心概念。随后提供了基于 Spring WebFlux 的实战步骤:环境搭建、依赖配置、R2DBC 响应式 Repository 与 Controller 编写、连接池与自定义 Scheduler 的调优。通过 JMeter 对比实验,WebFlux 在吞吐量、响应时间和 CPU 利用率上远超 MVC,适用于 I/O 密集、长耗时和流式数据场景。文末提醒避免阻塞调用、合理选用背压策略,并给出学习资源,帮助开发者平滑迁移至响应式架构。

原型 Bean 被固定

Spring 中把 @Service 标记为原型(@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE))的 Bean 注入到单例 @RestController 的字段时,Autowired 只在容器创建控制器时一次性实例化并固定该对象,导致原型作用失效并出现启动错误。源码分析显示 AutowiredAnnotationBeanPostProcessor 在 populateBean 阶段通过反射把找到的 Bean 直接赋值给字段,后续不再重新获取。解决办法有两种:①注入 ApplicationContext 并在方法中调用 applicationContext.getBean(ServiceImpl.class) 每次获取新实例;②在控制器中声明带 @Lookup 的抽象方法 getServiceImpl(),Spring 利用 CGLIB 生成子类并在调用时从 BeanFactory 动态获取原型 Bean。两种方式均能保证每次请求得到新的 ServiceImpl。文章还解释了 @Lookup 的实现原理以及 Spring 通过反射和方法覆盖实现原型注入的细节,提醒使用者注意单例‑原型混用的潜在陷阱。

MyBatis & 其他

本文系统阐述了 MyBatis 与 JPA 的核心差异:映射方式、可移植性、日志与 SQL 优化等;说明 MyBatis 支持的参数类型、实现一对多关联的两种 XML 配置(嵌套查询、嵌套结果),并比较 # (预编译防注入)与 $ (直接拼接、用于动态列)用法及适用场景。进一步介绍了 XML 与 Mapper 接口的 namespace 绑定、分页实现方式及其性能、以及一级、二级缓存机制。随后简要对比了 cookie 与 session 的存储位置、容量、安全性和适用场景,解释了 session 工作原理。最后覆盖了 GET/POST 区别、400 错误含义、请求乱码处理、Spring Boot 定时任务实现、日志 AOP 设计以及 Spring Boot JPA 的概念与实现。

Swagger使用教程

Swagger是基于OpenAPI的完整生态,包含规范(YAML/JSON)、交互文档(Swagger UI)、编辑器(Editor)和代码生成(Codegen)。教程分别演示了Node.js + Express和Spring Boot的集成方式,使用JSDoc或注解生成OpenAPI文档并通过/api‑docs查看。随后说明编写OpenAPI YAML、利用UI手动或自动化测试、使用Codegen生成服务器骨架和客户端SDK,以及生产环境的安全和CI/CD最佳实践。最后建议“契约先行”,先设计规范再生成代码,提升前后端协作效率与质量。

SpringBoot接口加密解密工具

本文介绍了一个基于 SpringBoot、通过注解实现的接口加密解密工具。工具支持 Base64、DES、3DES、AES、RSA 等对称/非对称算法以及 MD5 加密,只需在接口上添加 @ZxfEncryptResponse 或 @ZxfDecryptRequest 并指定 AlgorithmType 即可完成响应加密或请求解密。使用步骤包括拉取代码、打包成 jar、在项目中引入依赖并在配置文件中配置相应的密钥(DES、3DES、AES、RSA 公私钥),提供了一套可直接使用的密钥示例以及示例代码。项目源码已开源于 Gitee。

深入理解Mysql锁与事务隔离级别

本文系统阐释了 MySQL 并发控制的核心机制,包括事务的 ACID 特性、脏读/脏写、不可重复读、幻读等并发问题,以及对应的四种事务隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE)与 MVCC、间隙锁、Next‑Key 锁的实现原理。进一步比较了 MyISAM 的表锁与 InnoDB 的行锁、意向锁、共享/排他锁的行为差异,演示了不同隔离级别下的读写冲突和死锁情形,并提供了通过索引、锁粒度、系统状态变量等手段进行锁优化和死锁诊断的实用建议。

常用设计模式

文章介绍了几种常用设计模式及其在业务代码中的实践。首先通过文件解析的例子说明 if…else 分支违背开闭原则和单一职责,提出策略模式的定义、接口抽象和基于 Spring 自动装配的实现方式。随后以订单校验为场景,指出使用异常做流程控制的问题,阐释责任链模式的概念、抽象处理器结构以及在 Spring 中通过注解和链式初始化完成各校验节点的组织。最后简要提出模板方法模式在统一请求流程(如商户信息查询、报文加签、HTTP 调用)中的作用。整体强调通过这些模式提升代码可维护性、可扩展性和职责分离。

JVM垃圾收集器ParNew&CMS与底层三色标记算法

文章介绍了JVM分代回收的基本原理,阐述了新生代采用复制算法、老年代使用标记‑清除或标记‑整理的原因,并详细比较了Serial、Parallel、ParNew、CMS等收集器的实现与适用场景。重点解析了CMS的四阶段并发标记、三色标记、写屏障及其产生的浮动垃圾、漏标问题,提供了ParNew+CMS在大流量电商系统中的参数调优方案,强调通过合理设置堆、Survivor、晋升阈值等可降低Full GC频率,提高响应时延。

Java实现给PDF文件加水印、图片、签名(含测试类)

本文示例使用 iText5 在 Java 中为 PDF 添加文字水印、坐标文字、关键字定位文字、图片和签名。首先在 pom 中引入 `itextpdf` 与 `itext-asian` 依赖,随后提供 `PdfUtil` 工具类,实现:① `addWaterMark` 根据页面尺寸和透明度循环绘制倾斜文字水印;② `addText` 按坐标矩形在指定页插入文本;③ `addTextByKeyword` 解析页面文本,定位关键字坐标后写入新内容;④ `addImage` 与 `addSign` 在给定坐标或关键字位置嵌入图片/签章;⑤ `addImageAndText` 同时添加图片和文字。文末附带完整的 JUnit 测试示例,演示上述方法的调用方式与效果。

博客侧边栏热门文章与最新文章功能实现详解

在博客系统中通过侧边栏展示热门文章(按浏览量前5)和最新文章(按发布时间前3),提升阅读体验。后端采用只查询必要字段的 SQL,结合 Spring Cache 缓存,Controller 统一获取列表后使用 Java 8 Stream 分别排序取前5/3,实现数据复用并避免多次查询。前端使用 Thymeleaf 渲染,CSS 通过 position: sticky 实现左侧固定,并通过媒体查询在 PC 端显示、移动端隐藏。重点技术包括字段筛选、缓存、Stream 排序、粘性定位和响应式布局。

Istio服务网格:Java微服务无侵入式治理实战

文章介绍了在 Java 微服务中通过 Istio 服务网格实现无侵入治理的完整方案。首先分析传统硬编码治理导致的代码冗余、侵入性强和可观测性差等问题,随后阐述 Istio 的 Sidecar 架构及流量治理、自动 mTLS 安全、链路追踪与指标监控四大核心能力。接着提供在 K8s 环境下安装 Istio、自动注入 Sidecar、部署 order‑service 与 inventory‑service 示例的步骤,并演示灰度发布、熔断、OpenTelemetry 集成以及 Kiali、Grafana 可视化。文末列出 Sidecar 注入失败、追踪数据缺失、路由规则不生效等常见坑及排查方法,并给出从基础路由到多集群安全的最佳实践建议。