spring
文章平均质量分 76
以实战为线索,深入spring的方方面面
照物华
一切过往,皆为序章
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
脱离 Spring Boot 官方 Parent 之后,我才弄懂 Maven 的 -D 参数真相
摘要:本文揭示了Java开发中常见的Maven命令参数-D的本质,指出它只是向Maven上下文注入全局属性,而非Java或Spring的特殊指令。作者通过重构企业框架的经历,剖析了参数传递的三层机制:JVM系统属性、Maven全局属性和插件中转。文章还解释了maven.test.skip等"魔法"参数的工作原理,并分享了企业框架设计中的"紧急逃生口"实践。最后强调,从"使用轮子"到"理解轮子"是技术进阶的必经之路。原创 2026-05-15 22:44:07 · 400 阅读 · 0 评论 -
解密 `StringHttpMessageConverter` 如何破坏你的 `Result<T>` 封装
Spring Boot 应用中,当使用 ResponseBodyAdvice 统一封装 API 响应时,返回 String 类型会出现异常,响应变成 text/plain 格式的字符串而非预期的 JSON 结构。原创 2025-10-27 23:20:35 · 998 阅读 · 0 评论 -
构建优雅的 Spring Boot Starter:Bean 注册与属性绑定的两大机制
本文深入解析了Spring Boot Starter中Bean初始化和配置属性绑定的核心机制,指出最佳实践。1)避免直接在Starter中使用@Component注解,因其依赖组件扫描且不可控;2)推荐使用自动配置机制,通过@AutoConfiguration和条件注解实现按需加载;3)配置属性绑定需配合@ConfigurationProperties和@EnableConfigurationProperties使用,确保条件化注册。文章强调自动配置是Starter开发的唯一推荐方案,能提供可控组件集成方式原创 2025-10-20 04:31:23 · 854 阅读 · 0 评论 -
构建优雅的 Spring Boot Starter:深入掌握国际化与配置覆盖的最佳实践
在微服务与组件化盛行的时代,Spring Boot Starter 已成为封装通用能力的首选。但一个优秀的 Starter 不仅要功能强大,更应具备良好的灵活性。本文将直面一个经典挑战:如何为 Starter 内的提示与异常信息提供默认的国际化(i18n)支持,同时允许使用它的主应用(Consumer)轻松覆盖这些翻译?我们将深入 Spring `MessageSource` 的核心,揭示其强大的父子级联机制 (Parent-Child Chaining),并提供一套经过实战检验的“可覆盖”国际化方案。原创 2025-10-19 19:40:21 · 759 阅读 · 0 评论 -
SLF4J 日志新风尚:Fluent API vs. 传统 API,谁是你的菜?
SLF4J 2.x 引入的 Fluent Logging API 与传统日志记录方式形成对比。传统 API 简洁高效,适用于简单文本日志,通过{}占位符实现延迟格式化。而 Fluent API 采用链式调用,支持结构化日志(JSON格式)、真正的懒加载(避免不必要计算)和动态日志构建,更适合现代日志分析系统.原创 2025-07-19 20:54:39 · 1360 阅读 · 0 评论 -
Logback 配置的利器:深入理解<property>与<variable>
Logback 的 <property> 定义静态值,可从 XML 或外部文件加载,提升配置复用与可读性。<variable> 更动态,通过 scope 从系统属性或环境变量取值,适应多环境与云原生部署。解析属性时遵循优先级:本地/上下文 > 系统属性 > 环境变量。理解并结合使用两者,能构建灵活且适应性强的 Logback 配置。原创 2025-07-19 00:00:15 · 1014 阅读 · 0 评论 -
揭秘 Spring Boot 日志:Logback 配置文件加载顺序的奥秘
这篇博客深入探讨了 Spring Boot 中 Logback 日志配置文件的加载机制。文章详细解析了 AbstractLoggingSystem 的源码,揭示了配置文件(包括 logback.xml 和 logback-spring.xml)是如何被发现和加载的。文中明确了优先级规则:JVM 系统属性最高,其次是 logging.config 属性,然后是支持 Spring Profile 的 logback-spring.xml(优先级高于标准 logback.xml),最后是 Logback 的默认配原创 2025-07-18 03:12:06 · 1119 阅读 · 1 评论 -
Spring Boot 应用优雅停机与资源清理:深入理解关闭钩子
本文探讨了Spring Boot应用实现优雅停机(Graceful Shutdown)的关键机制。重点解析了spring.main.register-shutdown-hook配置项(默认为true)的作用,它决定了Spring Boot是否向JVM注册关闭钩子,确保在收到正常终止信号时能执行清理操作。文章详细介绍了两种实现自定义清理逻辑的方式:监听ContextClosedEvent事件(适用于全局清理)和使用@PreDestroy注解(适用于Bean级清理)。原创 2025-07-18 09:00:00 · 1498 阅读 · 0 评论 -
java中通过注解实现自定义验证器
本文介绍了如何创建并使用自定义验证注解来校验"YYYY-MM"格式的数据。首先定义了一个@ValidYearMonth注解,指定了验证规则和错误提示信息。然后实现了YearMonthValidator验证器类,通过正则表达式"\d{4}-\d{2}"确保字符串符合年月格式。最后展示了如何在实体类字段上使用该注解进行校验。这种自定义验证方式可以灵活应用于各种格式校验需求,确保数据在持久化前符合业务规则。原创 2024-03-04 18:11:32 · 679 阅读 · 1 评论 -
JPA在查询时自动过滤已删除的数据
在使用 JPA 时,若需在每次查询时自动过滤掉软删除(`deleted` 标记为 `true`)的数据原创 2024-03-04 15:22:52 · 1088 阅读 · 0 评论 -
关于JPA中CascadeType.REMOVE 和 orphanRemoval = true 与软删除逻辑的冲突及解决
本文探讨了JPA中CascadeType.REMOVE和orphanRemoval=true与软删除策略的冲突。两者都会导致物理删除操作,与软删除保留数据的初衷相违背。建议避免使用这两个设置,转而采用业务逻辑手动处理软删除传播或实现自定义删除逻辑。在设计数据模型时需综合考虑实体关系与删除策略的兼容性,以维护数据完整性。最终结论指出这些JPA特性通常不适用于软删除场景,开发者应根据需求选择合适策略。原创 2024-03-04 12:53:53 · 768 阅读 · 0 评论 -
关于JPA中CascadeType.REMOVE 和 orphanRemoval = true 的区别
关于JPA中CascadeType.REMOVE 和 orphanRemoval = true 的区别原创 2024-03-04 12:42:57 · 955 阅读 · 0 评论 -
揭秘 Spring Boot 配置的奥秘:从文件查找、加载到属性注入的深度实践
Spring Boot配置管理深度解析:本文系统介绍了Spring Boot配置管理的核心机制,包括配置文件的查找优先级(目录优先级和格式优先级)、多环境配置策略(profile激活与组合)、灵活加载方式(自定义路径、追加配置和2.4+版本引入的config.import功能)。重点讲解了属性注入的两种方式:传统的@Value注解和类型安全的@ConfigurationProperties绑定,并特别说明了如何突破@PropertySource对YAML文件的限制。原创 2023-08-05 16:51:06 · 968 阅读 · 0 评论 -
@SpringbootApplication详解和自定义类型过滤器
Spring的强大之处不仅仅是提供了IOC容器,能够通过过滤规则指定排除和只包含哪些组件,它还能够通过自定义TypeFilter来指定过滤规则。如果Spring内置的过滤规则不能够满足我们的需求,那么我们便可以通过自定义TypeFilter来实现我们自己的过滤规则。在使用@ComponentScan注解实现包扫描时,我们可以使用@Filter指定过滤规则,在@Filter中,通过type来指定过滤的类型。/**原创 2023-08-05 11:01:14 · 966 阅读 · 0 评论 -
SpringBoot使用Swagger3出现Unable to infer base url.This is common when using dynamic servlet
在使用`SpringBoot`中配置`Swagger3`的时候,出现Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is av原创 2022-04-13 23:56:12 · 8091 阅读 · 6 评论 -
Spring框架核心之AOP
面向切面编程,又叫AOP,就是将交叉业务逻辑封装成切面,利用AOP的功能将切面织入到主业务逻辑中。所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全检查、事务、日志等。若不使用AOP,则会出现代码纠缠,即交叉业务逻辑与主业务逻辑混合在一起。这样,会使主业务逻辑变的混杂不清。术语说明切面切面泛指交叉业务逻辑。比如事务处理、日志处理就可以理解为切面。常用的切面有通知与顾问。实际就是对主业务逻辑的一种增强织入织入是指将切面代码插入到目标对象的过程。连接点连接点指切原创 2022-04-06 17:52:58 · 687 阅读 · 0 评论 -
Spring框架之注解编程
本文主要介绍spring5注解编程中使用到的 xml 配置和java配置的方式,@Autowired和@Resource 的区别原创 2021-09-03 17:17:07 · 580 阅读 · 0 评论
分享