自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 Redis Lua脚本:使用 Redis Lua 脚本优化 Spring Boot 应用

本文介绍了Redis Lua脚本在Spring Boot应用中的优化使用。Redis Lua脚本通过原子性执行、减少网络开销、代码复用和复杂逻辑处理等优势,显著提升系统性能。文章详细讲解了在Spring Boot中集成Lua脚本的步骤:创建脚本文件、配置RedisScript Bean以及测试执行。特别揭示了Spring Boot底层如何智能切换EVAL和EVALSHA命令,并自动处理脚本缓存失效的情况。最后强调Lua脚本自身具有原子性,无需额外使用Redis事务命令。通过合理使用Redis Lua脚本,开

2025-12-18 14:49:27 692

原创 Redis事务和锁:事务、分布式锁与乐观、悲观锁深度指南

Redis事务与锁机制深度解析:本文系统介绍了Redis的事务机制、分布式锁实现及乐观/悲观锁策略。事务通过MULTI/EXEC命令保证单实例内命令序列化执行,虽无完整回滚但具备原子性。分布式锁基于SET NX EX实现跨进程互斥访问,防止竞态条件。Redis通过WATCH支持乐观锁(CAS机制),而悲观锁则需模拟实现。二者可组合使用:先用分布式锁保证独占访问,再通过事务确保Redis内部操作一致性。这些机制为构建高并发系统提供了关键并发控制手段。

2025-12-18 14:48:48 1001

原创 Redis 内存管理:从最大内存到淘汰策略和连接数

本文系统介绍了Redis内存管理与连接配置的核心参数。首先强调必须设置maxmemory限制以防止内存耗尽;其次解析了6种内存淘汰策略,默认noeviction不淘汰数据,建议根据场景选择allkeys-lru等策略;然后说明maxmemory-samples参数通过抽样平衡LRU/LFU算法的准确性与性能,默认值5即可满足多数需求;最后指出maxclients默认10000连接数可保护系统稳定性。合理配置这四个关键参数可确保Redis服务高效稳定运行。

2025-12-17 11:19:05 843

原创 Redis序列化器:为什么 Spring Boot Data Redis 存了数据,但客户端工具却看不到?

摘要: Spring Boot 集成 Redis 时,使用默认的 JdkSerializationRedisSerializer 会导致 Redis 客户端查看数据时出现乱码,因为该序列化器生成的是 Java 专属的二进制格式。解决方案是改用 JSON 序列化器(如 GenericJackson2JsonRedisSerializer),通过自定义 RedisTemplate 配置 Key 和 Value 的序列化方式。关键配置包括:Key 使用 StringRedisSerializer,Value 使用

2025-12-17 11:18:30 873

原创 深入理解 Spring Boot:自动化配置类与 FactoryBean 的异同与协作

深入解析 Spring Boot 自动化配置类(Auto-configuration)与 FactoryBean 的核心区别与协作机制。本文通过代码示例和动物比喻,清晰阐明了自动化配置类的“条件决策”能力与 FactoryBean 的“复杂生产”职责。了解何时使用 @Conditional 注解,何时利用 FactoryBean 封装动态代理等复杂逻辑,帮助 Spring 开发者避免常见误解,掌握这两种关键机制在现代应用集成中的最佳实践。提升你的 Spring 框架架构理解,优化应用配置。

2025-12-04 19:40:15 683

原创 深度解析 Spring @Conditional:实现智能条件化配置的利器

本文将带您从底层Condition接口入手,全面解析SpringBoot如何通过@ConditionalOnClass、@ConditionalOnMissingBean等条件注解实现智能化Bean加载。通过自定义条件判断实战示例,结合SpringBoot自动配置源码剖析,彻底掌握条件化配置的精髓。无论您是想深入理解SpringBoot自动配置机制,还是希望优化企业级应用配置管理,这篇关于@Conditional注解的深度指南都将为您提供完整解决方案!

2025-12-04 19:39:41 743 1

原创 SpringBoot自定义场景启动器

SpringBoot 3.x自定义Starter开发实战|自动配置模块与Starter聚合模块设计|@ConditionalOnProperty条件注解详解|AutoConfiguration.imports清单文件配置|SpringBoot场景启动器完整实现方案|Java 17+ Jakarta EE技术栈实战

2025-12-03 14:39:20 1198

原创 踩坑与解惑:深入理解 SpringBoot 自动配置原理与配置排除机制

深入解析SpringBoot自动配置核心机制,详解@EnableAutoConfiguration与@Conditional注解的工作原理。本文针对开发者常遇的配置加载问题,重点揭示使用@SpringBootApplication(exclude)属性时的常见错误,并提供三种正确排除自定义配置类的实用方案。适合所有SpringBoot开发者阅读,帮助您彻底掌握配置控制技巧,避免项目配置冲突。

2025-12-03 14:39:02 909

原创 深入理解 SpringBoot 核心:自动配置原理、ImportSelector与配置加载机制

本文深入剖析SpringBoot自动配置的核心原理,详解ImportSelector如何实现动态配置加载,并通过代码示例对比Spring IoC容器的三种配置加载方式(直接指定、@Import模块化、@ComponentScan扫描)。带你彻底理解SpringBoot“开箱即用”背后的设计哲学与实现机制,掌握SpringBoot如何根据依赖智能推断并配置Bean,以及Starter依赖如何通过条件注解和清单文件实现零配置集成。

2025-12-02 21:45:44 1322 4

原创 彻底搞懂 @SpringBootConfiguration:为什么需要它?自动检测功能到底体现在哪?

探索Spring Boot中看似“多余”的@SpringBootConfiguration注解的真正价值!本文深入解析其与标准@Configuration的核心区别,揭秘其“语义化标记”的设计哲学,并重点解答:它的自动检测功能具体体现在哪里?为何它是实现Spring Boot“约定优于配置”及自动化测试的关键。带你彻底理解这一注解如何让框架智能定位主配置,实现零配置测试加载。

2025-12-02 21:42:51 998

原创 Spring Boot基础入门,整合SpringMVC、Mybatis、拦截器、AOP、测试环境以及配置日志信息等

springboot 整合mvc和拦截器、mybatis、AOP、日志模块,spring boot场景启动器介绍,spring boot多环境配置,同时激活多个环境。

2025-10-30 21:38:32 513

原创 Mybatis 插件机制(拦截器)和缓存机制

MyBatis提供了插件机制和缓存机制两大核心功能。插件机制基于拦截器(Interceptor)设计,允许在SQL执行过程的关键节点(Executor、ParameterHandler、ResultSetHandler、StatementHandler)插入自定义逻辑,实现分页、日志等扩展功能。缓存机制包含一级缓存(SqlSession级别)和二级缓存(Mapper级别),可提升查询性能。Executor作为核心组件,负责SQL执行全流程,包含4种实现:SimpleExecutor(默认)、CachingE

2025-10-30 12:39:45 837

原创 mybatis基本使用

MyBatis基本使用流程及关键特性总结: 基本流程:通过加载配置文件创建SqlSessionFactory,再获取SqlSession会话,最后通过Mapper接口执行SQL操作。 工具类封装:使用静态代码块创建全局唯一的SqlSessionFactory,提供手动/自动提交事务的会话获取方法。 配置优化:支持日志输出和驼峰命名自动映射。 参数处理: #{}采用预编译方式,防止SQL注入 ${}直接字符串替换,适用于动态表名/列名等场景 参数接收: 单个参数时可任意命名 通过Mapper接口定义方法,XM

2025-10-24 18:46:25 987

原创 SpringMVC 数据校验和BindingResult以及自定义校验注解

本文介绍了Spring MVC中BindingResult的用法与参数校验机制。BindingResult用于处理数据绑定错误,可配合@Valid/@Validated使用,包含验证结果信息,并提供了hasErrors()、getFieldError()等方法进行错误处理。 在参数校验方面,文章详细列举了JSR303标准注解(如@NotNull、@Size等)及其功能,并给出了实体类校验示例。同时说明了Spring Boot如何集成校验功能,通过@Valid触发自动验证,验证失败会抛出MethodArgum

2025-10-21 14:29:37 985

原创 Spring MVC 拦截器interceptor

Spring MVC拦截器是基于AOP思想实现的组件,用于在控制器方法执行前后插入自定义逻辑。其生命周期包含三个关键方法:preHandle(预处理,决定是否拦截)、postHandle(后处理,修改返回数据)和afterCompletion(请求完成后回调,用于资源清理)。多拦截器执行时遵循"先进后出"原则,preHandle顺序执行,postHandle和afterCompletion逆序执行。主要应用于权限校验、日志记录等场景,通过XML或注解配置拦截路径,有效解耦非业务代码。示例

2025-10-21 14:28:02 1175 1

原创 Spring MVC 封装全局统一异常处理

掌握Spring MVC全局统一异常处理的最佳实践本文深度解析Spring MVC全局统一异常处理的完整实现方案。通过@ControllerAdvice和@ExceptionHandler注解,构建企业级异常处理架构,解决传统try-catch代码分散问题。涵盖统一响应体封装、业务异常枚举设计、自定义业务异常创建等核心组件,提供RESTful API异常处理的标准化方案。

2025-10-18 22:12:05 662

原创 SpringMvc框架概念和核心组件介绍

SpringMVC是基于Servlet API的控制层框架,与Spring家族无缝集成。其核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter等,简化了参数接收和响应处理。在混合开发中,通过共享域实现数据与页面绑定,支持JSP页面跳转、转发和重定向。转发(forward)保持URL不变,共享请求域;重定向(redirect)改变URL,适用于跨请求数据传递。配置需引入JSP依赖,设置视图解析器,并确保Handler方法不被@ResponseBody修饰。

2025-10-17 15:53:49 986

原创 三种方式管理Spring核心 IOC/DI 控制反转和依赖注入

核心概念深度剖析IoC与DI设计原则的本质理解传统编程模式的痛点与Spring解决方案控制权反转的实际意义与应用场景三种配置方式完整实战纯XML配置 - Spring 1.0经典方式,涵盖Bean定义、属性注入、FactoryBean高级特性XML+注解组合 - Spring 2.5升级方案,平衡配置简洁性与灵活性配置类方式 - 现代Spring应用首选,基于JavaConfig的类型安全配置

2025-10-07 17:17:59 574

原创 gitee设置不公开邮箱地址,推送报错解决方案

摘要 Gitee提交报错问题解决方案:当设置隐藏邮箱却用真实邮箱提交时,会出现"Push will publish a hidden email"错误。原因是本地git配置的邮箱与Gitee隐藏邮箱设置冲突。解决方法:1)在Gitee账户复制git配置信息;2)将邮箱改为账户中的隐藏邮箱地址;3)执行配置命令更新用户信息。这样即可解决因邮箱隐私设置导致的提交冲突问题。

2025-10-07 14:49:17 415

原创 Maven 依赖管理与版本优化

本文详细介绍了Maven POM文件的配置要点: 项目坐标和元数据配置 包含GAVP坐标体系(groupId、artifactId、version、packaging) 提供项目名称、描述和URL等元数据配置 详细说明5种打包类型及其适用场景 介绍版本号管理规范 参数配置和属性管理 展示完整的属性配置示例,包括项目信息、依赖版本、插件版本等 说明属性引用方式及使用场景 列举Maven内置属性变量和环境变量 技术要点 使用XML格式定义项目构建配置 通过属性统一管理依赖版本 支持资源过滤和变量替换 包含项目构

2025-09-24 18:16:36 1165 3

原创 maven GAVP 的含义以及他们在项目管理以及构建过程起到的作用

Maven GAVP坐标系统解析 GAVP是Maven项目的核心标识系统,由四个关键属性组成:groupId(组织域名倒写)、artifactId(项目名称)、version(版本号)和packaging(打包方式)。它们共同构成项目的唯一坐标,作用类似于"身份证": 定位依赖:通过GAVP可精确定位仓库中的构件 项目管理:决定项目在仓库中的存储路径和文件名格式 版本控制:支持快照版(SNAPSHOT)和发布版管理 构建输出:packaging指定输出类型(默认jar,可选war/pom

2025-09-22 22:00:24 881

原创 Java数据类型转换详解:从原理到实践,再也不怕被面试官问到了

文章首先列出基本数据类型的取值范围表,然后通过示例代码详细演示:1)自动类型提升(小类型转大类型)如byte→short、char→int等;2)强制类型转换(大类型转小类型)可能导致的溢出和精度丢失问题;3)byte、short和char在运算中自动提升为int的特殊规则。4)三元运算符类型转换

2025-09-21 20:31:26 680

原创 Java 泛型完全指南:从小白到轻松掌握

本文是Java泛型的入门指南,适合初学者系统学习。文章通过"神奇盒子"的比喻形象解释了泛型的概念,对比了使用Object和泛型的区别,强调了泛型在类型安全和代码简洁性上的优势。主要内容包括:泛型的三种基本形式(类、方法、接口)及使用示例;泛型命名规范(T、E、K、V等)及其语义约定;类型擦除原理和高级话题简介。最后总结了泛型的四大价值:类型安全、消除强制转换、代码复用和提高可读性。文章采用问答形式解答常见疑惑,帮助读者轻松掌握这一重要特性。

2025-09-19 19:03:13 980

原创 Spring MVC 常用注解及代码示例

Spring MVC 常用注解解析: @Controller:传统Web应用,返回视图名渲染HTML页面,需配合视图解析器 @RestController(=@Controller+@ResponseBody):RESTful API专用,直接返回JSON/XML数据,无需视图解析 @RequestMapping:定义请求映射路径,可作用于类/方法级别,组合形成完整URL @ResponseBody:强制方法返回值直接写入响应体,跳过视图渲染 应用场景: 多页面网站用@Controller 前后端分离项目用

2025-09-19 14:35:59 1234

原创 理解 multipart/form-data 中的 boundary:文件上传的关键

multipart/form-data中的boundary是文件上传的关键分隔符。它作为HTTP请求头中的唯一标识字符串(如----WebKitFormBoundaryEBDscQO08JaFZOy6),用于分隔请求体中的不同数据部分,包括文本字段和文件数据。boundary保证了二进制数据不会与字段分隔符冲突,支持混合类型数据上传,并确保服务器能正确解析请求。每次请求生成的随机boundary前缀保证了唯一性,使多文件上传和复杂表单提交成为可能,是可靠文件传输的基础机制。

2025-09-17 18:04:58 573

原创 Java 运行时异常与编译时异常以及异常是否会对数据库造成影响?

Java异常分为编译时异常(Checked Exception)和运行时异常(Runtime Exception)。编译时异常(如IOException)必须显式处理(try-catch或throws),代表可预见的业务问题,强制程序员编写容错代码;运行时异常(如NullPointerException)则无需强制处理,通常反映编程错误。Spring框架基于这一设计,默认对运行时异常回滚事务(视为系统错误),而对编译时异常不自动回滚(视为可恢复的业务异常)。这种分类体现了Java不同的错误处理哲学:编译时异

2025-09-09 21:24:18 964

原创 Spring 基于注解的自动化事务

Spring基于注解的自动化事务管理摘要 Spring通过@EnableTransactionManagement启用声明式事务管理,使用@Transactional注解标记需要事务的方法。该注解支持多种属性配置,包括事务管理器指定、隔离级别、传播行为等。默认情况下,事务在运行时异常时回滚,编译时异常不回滚。 事务管理器(PlatformTransactionManager/ReactiveTransactionManager)负责控制事务的获取、提交和回滚,底层通过TransactionIntercept

2025-09-06 20:45:57 1287 4

原创 Spring AOP面向切面的底层原理、注解、切入点表达式、连接点获取方法名参数值等

Spring AOP底层通过动态代理实现,为切面目标对象创建代理类,将通知方法组织成增强器链。核心注解包括@Before、@AfterReturning、@AfterThrowing和@After,分别对应方法执行前后、返回结果和异常处理的切入点。切入点表达式支持execution和args两种方式,其中execution需指定方法全签名或简化写法。实现步骤包括导入依赖、编写切面类、定义通知方法和测试验证。通过JoinPoint可获取方法执行上下文信息。AOP执行顺序为:前置通知->目标方法->

2025-08-24 21:52:03 519

原创 Java静态代理与动态代理实战解析

本文介绍了Java中的静态代理和原生动态代理实现方式。静态代理需要手动创建代理类并实现相同接口,通过构造函数注入被代理对象,在方法前后添加额外逻辑。动态代理则利用Proxy.newProxyInstance()方法自动生成代理对象,通过InvocationHandler实现代理逻辑,但要求被代理对象必须实现接口。两种方式都能在不修改原始类的情况下增强功能,动态代理更加灵活但不支持无接口类。示例展示了数学计算器的代理实现,包括接口定义、实现类、代理类及测试代码。

2025-08-24 21:49:19 242

原创 Spring三级缓存解密:解决循环依赖的魔法

Spring三级缓存机制是解决单例Bean循环依赖的关键设计。当A依赖B、B又依赖A时,Spring通过三级缓存避免死锁:1)一级缓存存放完整Bean;2)二级缓存存放半成品Bean(已实例化未初始化);3)三级缓存存放Bean工厂(可生成代理对象)。核心原理是提前暴露对象引用而非完整对象,通过将未完成初始化的Bean放入二级缓存,使相互依赖的Bean能获取对方引用,从而将创建过程拆分为独立步骤。最终所有Bean完成初始化后从二级缓存移至一级缓存。该机制通过对象地址引用解决了循环依赖问题。

2025-08-24 18:40:48 354

原创 Spring容器生命周期

摘要:本文详细介绍了Spring容器生命周期中的关键组件和回调机制。主要内容包括@Bean注解的初始化和销毁方法配置、InitializingBean和DisposableBean接口的使用、@PostConstruct和@PreDestroy注解的执行时机,以及BeanPostProcessor接口的扩展功能。通过代码示例和时序图展示了各组件在生命周期中的执行顺序和优先级关系,帮助开发者理解Spring容器管理Bean的完整流程。文章参考了尚硅谷的SpringBoot容器视频教程,适合Spring初学者系

2025-08-07 16:43:57 1097

原创 EmEditor 通过正则表达式为每行添加<p></p>标签

本文介绍了使用Ctrl+H快捷键打开替换功能的基本操作。通过输入查找内容(.*)和替换内容<p>$1</p>,可以实现为文本添加HTML段落标签的批量处理。文中包含两张示例图片:第一张展示替换对话框的操作界面,第二张显示替换后的文本效果。该方法适用于快速格式化文本内容,提高编辑效率。

2025-06-17 15:05:38 256

原创 Python OOP核心技巧:如何正确选择实例方法、类方法和静态方法

本文深入剖析Python三大方法类型:实例方法、类方法和静态方法的本质区别与适用场景。通过对比表格和20+实用代码示例,详细讲解它们在访问能力、语法结构和应用实践中的不同。从银行账户系统到支付处理器,从文件处理到数学工具类,每个案例都展示了如何根据业务需求选择最合适的方法类型。文章还提供了一个实用的决策流程,帮助开发者在实际项目中做出正确选择。无论你是Python初学者还是经验丰富的开发者,这篇指南都能帮你编写出更加优雅、高效的面向对象代码。

2025-05-16 10:22:13 1055

原创 Python面向对象编程必学概念:从饼干模型理解OOP(小白友好版)

本文通过生动的饼干制作比喻,深入浅出地讲解Python面向对象编程的8大核心概念。从类与对象的基础关系,到继承、封装、多态的进阶应用,再到抽象类、组合、类方法和属性装饰器的高级技巧,每个知识点都配有详细代码示例和直观解释。无论你是编程新手还是Python初学者,这篇指南都能帮你轻松理解面向对象编程的精髓,为你的编程之旅打下坚实基础。Python面向对象编程、Python OOP、Python类与对象、Python继承、Python封装、Python多态、Python类方法、Python静态方法

2025-05-15 23:34:50 790

原创 Python 类变量与实例变量完全指南:区别、使用场景及常见陷阱

深入探讨 Python 中类变量与实例变量的核心区别。本文详细解析两者的内存模型、访问方式、生命周期和适用场景,通过实例代码帮助你掌握面向对象编程的关键概念,避免常见陷阱,提升代码质量。适合 Python 初学者到中级开发者阅读。关键词:Python 类变量,Python 实例变量,面向对象编程,Python OOP,Python 变量作用域,Python 内存模型,Python 编程技巧Python 中类变量与实例变量:完整对比与最佳实践深入理解 Python 的类变量与实例变量:从原理到实战

2025-05-15 23:11:05 651

原创 playwright解决重复登录问题,通过pytest夹具自动读取storage_state用户状态信息

夹具一:将storage_state登录状态导出为json文件开启夹具自动调用 autouse=Truebrowser夹具,来源于pytest-playwright包封装的夹具,替代该代码browser = playwright.chromium.launch()。base_url夹具,来源于pytest-base-url包封装好的夹具,用于在pytest.ini设置全局的base_url。pytestconfig夹具,来源于pytest包,用于处理pytest.ini配置文件

2025-03-30 22:10:08 1166

原创 Playwright页面对象模型POM + 常见断言 + playwright接口断言 + 参数化

【代码】Playwright页面对象模型POM + 常见断言 + playwright接口断言+参数化。 with login_page.page.expect_response('**/login') as res: login_page.click_login() with login_page.page.expect_request('**/login') as req: login_page.click_login()

2025-03-30 18:07:34 662

原创 Playwright设置base_url的三种方式

Playwright设置base_url的三种方式。方式一:browser.new_context(base_url='http://localhost:8080')。方式二:在配置文件中添加

2025-03-29 21:40:37 377

原创 python 上下文管理器with

任何实现了__enter__和__exit__方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。

2025-03-29 16:01:15 384

原创 playwright基础样例demo大全,启动本地浏览器,playwright浏览器页面接管,窗口最大化

playwright基础示例代码,包括:启动不同浏览器、启用本地浏览器、palywright页面接管、窗口最大化、脚本录制

2025-03-28 20:35:58 1505 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除