Spring Boot

搜索结果

在博客中搜索相关文章

79 篇文章 7

JVM(一)

JVM由类加载器、运行时数据区、执行引擎和本地接口四部分构成。运行时数据区包括程序计数器、虚拟机栈(及本地方法栈)、堆、方法区和运行时常量池。JVM启动先装载JRE、装入JVM动态库、初始化并创建JNIEnv,随后加载并解释class或jar文件,执行引擎将字节码翻译为机器指令。程序计数器负责指令流控制,栈用于方法调用和本地方法。内存划分决定对象、类元数据及常量的存放位置,内存不足时抛出相应异常。类加载经历加载、验证、准备、解析、初始化等阶段。

Spring MVC 中@RequestParam与@RequestPart的区别详解

文章对比了 Spring MVC 中 @RequestParam 与 @RequestPart 的区别。@RequestParam 通过 Servlet API 获取 URL 查询或 x-www-form-urlencoded 表单的简单参数,适用于基本类型或集合;@RequestPart 依赖 MultipartResolver 与 HttpMessageConverter,专用于 multipart/form-data 中的文件、JSON、XML 等复杂部分,可依据 Content‑Type 自动转换为对象。文中提供了典型代码示例并给出选型建议:普通参数用 @RequestParam,处理 multipart 中的文件或结构化数据用 @RequestPart。

面试篇【一】

文章系统梳理了面试常考的技术要点:Spring AOP 动态代理实现原理、JDK8 前后 HashMap 与 ConcurrentHashMap 的结构与扩容机制、线程池大小的 CPU/IO 区分、G1 垃圾回收特性与 OOM 排查、MySQL 事务隔离级别及默认 REPEATABLE_READ、SQL 慢查询优化、缓存穿透/击穿/雪崩的原因与防御、LRU 实现、JVM 堆参数设置、栈队列应用、InnoDB 与 B+ 树索引、MVCC 与 undo log 原理以及索引失效情形。

MySQL 新增字段但 Java 实体未更新:全面解析与解决方案

MySQL 表新增字段但对应 Java 实体未同步,会导致 MyBatis 映射错误、数据丢失或 JPA 启动失败等异常,进而出现功能异常、数据不一致和排查困难。根本原因在于 ORM 映射未保持同步,往往是手动更新疏漏或误以为 ddl‑auto 能双向同步。解决思路分为三层:①紧急修复——根据报错快速在实体类、resultMap 或 @Column 中补全字段并重新部署;②流程规范——使用 Liquibase/Flyway 管理数据库版本,强制在同一次代码提交中同步 SQL 脚本和实体改动,禁用生产环境的 ddl‑auto=update;③辅助工具——利用 IDE 插件、MyBatis Generator 等自动生成代码,强化 Code Review。通过版本控制、CI/CD 自动迁移和团队规范,可根除数据库‑代码不同步导致的故障。

从A标签跳转后JS失效?我踩过的坑和填坑方法

在博客列表页通过普通 `<a>` 跳转到文章详情时,页面加载正常但灯箱、复制按钮等 JS 功能失效,刷新或直接访问 URL 则一切正常。原因是浏览器在普通跳转时可能复用旧的 JS 环境或缓存页面,导致新页面的脚本未完整重新执行。临时解决办法是给链接加 `target="_self"`,强制完整加载;更根本的做法是改进 JS 初始化时机:在 `DOMContentLoaded`、`load`、`pageshow` 等事件中检查关键元素是否已出现,必要时使用 `setTimeout` 或 `Promise` 等方式等待后再调用 `initLightbox、initCopyButton` 等函数;文中还提供了基于 `PageManager` 的完整初始化管理器,能够在页面恢复、前进/后退等场景下安全重置并逐个等待所需元素。经验教训包括:不要盲目信任 `DOMContentLoaded`,要防御性地检查 DOM,了解浏览器缓存机制,并可考虑使用 `MutationObserver` 监听 DOM 变化。

过多赠予,无所适从

本文以 Spring @Autowired 为例,解析“required a single bean, but 2 were found”错误的根源——在容器中存在同类型的多个 Bean,且缺乏 @Primary、@Priority 或名称匹配等优先级标识,导致 Spring 无法决定注入对象。通过源码剖析展示了 Bean 的实例化与属性填充过程以及 AutowiredAnnotationBeanPostProcessor 的工作原理。解决思路包括为其中一个实现加 @Primary、使用 @Qualifier 或通过属性名与 Bean 名称精确匹配等方式,以明确注入目标,进而消除冲突。

Optional详解

Optional 是 Java 8 为避免 NPE 而提供的容器类,使用 of、ofNullable、empty 创建实例,内部不可直接 new。常用方法包括:get 在值为空时抛异常;isPresent 判断是否非空;ifPresent 为空时不执行,非空时执行 Consumer;filter 根据 Predicate 过滤返回自身或空 Optional;map 将值映射为新对象并包装;flatMap 直接返回另一个 Optional;orElse、orElseGet、orElseThrow 在值为空时分别返回默认值、惰性 Supplier 或抛自定义异常。文中通过 Person 示例演示各方法用法,并给出 Service 层查询、DAO 返回 Optional 的实战场景,强调根据业务需求选用合适方法以提升代码可读性和安全性。

mapstruct的基本使用

MapStruct 是基于注解的编译时代码生成器,可通过普通 getter/setter 实现类型安全、无反射的对象映射,避免手写冗余代码并在编译期捕获映射错误。文中先展示了博客评论接口的传统实现,代码繁琐且不优雅;随后引入 mapstruct‑jdk8 与 mapstruct‑processor 依赖,定义 `CommentInfoConverter` 接口并在 `map` 方法中把 `HttpServletRequest` 参数转换为 `Comments` 实体,Controller 只需调用该转换器即可,使业务层代码简洁。最后给出运行时出现的 NullPointerException 堆栈,提示在 MapStruct 处理器获取版本信息时出错,需检查依赖版本或构建环境。

Sentinel深度解析:微服务流量防卫兵的原理与实践

Sentinel 是阿里巴巴开源的轻量级流量防卫组件,针对微服务架构提供流量控制、熔断降级和系统自适应保护。文章阐述了其基于令牌桶、漏桶和滑动窗口的限流算法,三种熔断策略(慢调用比例、异常比例、异常数),以及通过 CPU、RT、QPS 等指标实现的整体系统保护。随后给出快速入门、Spring Cloud、Feign、规则持久化(如 Nacos)和集群流控的实战配置示例,并提出精细化流控、合理降级、动态规则调节和监控告警的最佳实践。最后强调根据业务场景灵活配置并结合可视化运维,才能充分发挥 Sentinel 在分布式系统中的高可用保障作用。

SpringBoot+Elasticsearch按日期实现动态创建索引

文章介绍了在 SpringBoot 中通过 @Document 的 EL 表达式实现 Elasticsearch 按日期动态创建索引的完整方案。核心思路是把索引后缀(如 yyyy_MM_dd)封装为 Bean(esIndex),并在每天零点的定时任务中销毁旧 Bean、重新注册新值,同时手动调用 ElasticsearchRestTemplate 创建索引,以保证 shards、replicas 等配置不丢失。实体类需声明 createIndex = false,避免自动创建导致参数缺失;示例代码包括配置类、实体、Repository 与 Controller,演示了定时更新索引和保存数据后在 Kibana 中观察新索引的效果。

定义的 Bean 缺少隐式依赖

文章指出,Spring 在创建标记为 @Service(或其他注解)的 Bean 时,如果该类显式声明了构造器,容器会依据构造器参数类型自动在 BeanFactory 中查找对应的 Bean 并注入。若参数(如 String)没有相应的 Bean,Spring 在 AbstractAutowireCapableBeanFactory#createBeanInstance → autowireConstructor → resolveDependency 过程中抛出 “Parameter … could not be found” 异常。解决办法是为构造器参数提供相应的 Bean(如通过 @Bean 定义 String serviceName()),或避免出现多个可选构造器导致歧义。文章提醒开发者不要把 Spring Bean 当作普通对象直接 new,需了解其隐式依赖规则,以免出现装配失败。

博客实战:如何实现精准的“邮件直达评论”深层链接功能

本文介绍在 Spring Boot + Thymeleaf 项目中实现高精度评论深层链接的完整方案。通过后端递归计算目标评论的顶级父 ID(Thread ID),在邮件链接中携带 commentId 和 threadId,并保留锚点作降级;前端脚本解析参数,判断评论是否被折叠,自动展开父级、轮询 AJAX 加载、双重滚动修正图片加载导致的偏移,并以 Teal 呼吸灯动画高亮目标。该实现解决了定位失效、隐藏内容和视觉反馈弱等痛点,提升了用户在邮件通知中快速定位回复的体验。