- 博客(22)
- 收藏
- 关注
原创 Java 随机数陷阱:SecureRandom
一个看似简单的小说推荐功能,在本地开发和云服务器直接部署时都运行良好,但一旦迁移到 Docker 容器环境,接口响应时间从毫秒级飙升到几十秒甚至超时,最终导致后端服务假死。只有重启容器才能恢复。Docker 容器部署(同一台 CentOS 8):推荐接口响应 5s~60s+,高并发时线程池耗尽。且业务对性能极度敏感(如高并发网关),对于非安全类随机(如路由分发、采样),# 危险值:< 100(此时读取 /dev/random 会阻塞)通用原则:区分"密码学安全随机数"和"普通伪随机数"的使用场景。
2026-07-01 18:44:44
350
原创 SpringBoot + Vue 前后端分离项目进阶容器化部署完全指南
本文介绍使用Docker Compose实现一键容器化部署全栈项目的方法。通过将前后端应用、MySQL、Redis、RabbitMQ等组件全部容器化,并配置docker-compose.yml文件定义服务依赖关系。重点包括:1)各组件Dockerfile编写;2)容器间网络连接配置;3)Nginx反向代理设置;4)数据卷持久化存储;5)使用docker-compose命令管理全栈服务。该方法仅暴露Nginx 9092端口,通过单条命令即可完成整个项目的部署和运维,大幅简化了传统部署流程。
2025-09-29 17:24:20
643
原创 关于MySQL 的索引与 Elasticsearch 的倒排索引的一些思考
本文探讨了MySQL的B+Tree索引和Elasticsearch倒排索引的异同。两者在抽象层面都是键值映射结构,但设计理念差异显著:B+Tree适合范围查询和有序数据,而倒排索引擅长精确匹配和全文搜索。测试表明,即使不分词,倒排索引也无法替代B+Tree的范围查询功能。最佳实践是让二者协同工作,MySQL作为主数据源,Elasticsearch支持搜索功能,各展所长。
2025-09-04 17:17:27
598
原创 大侠的成长之路——少侠的云服务器部署秘籍:Spring Boot + Vue实战全攻略
本文详细介绍了如何从零开始部署一个SpringBoot+Vue前后端分离项目到云服务器的完整流程。首先对比了腾讯云、阿里云和华为云的主要特点,作者选择了腾讯云首年79元的入门套餐。文章涵盖服务器选购、系统镜像选择、防火墙设置、Docker安装等前期准备工作,并重点讲解了MySQL、Redis、RabbitMQ等中间件的Docker化部署方法。对于项目部署部分,详细说明了后端SpringBoot项目的打包上传、启动方式,以及前端Vue项目通过Nginx反向代理的配置过程。
2025-08-08 00:22:44
804
原创 Spring Boot集成Elasticsearch优化搜索功能
Elasticsearch为解决关系型数据库搜索瓶颈提供了高效方案。相比MySQL的模糊查询性能低下问题,ES通过倒排索引机制实现毫秒级响应,速度提升100倍。核心优势包括智能分词、分布式架构和丰富的查询功能。SpringBoot整合ES可通过简单配置实现全文检索,支持高亮、排序等高级功能。实践表明,ES特别适合电商搜索、内容检索等场景,建议采用MySQL+ES组合方案,兼顾事务与搜索需求。合理使用ES能显著提升搜索性能,改善用户体验。
2025-08-07 22:02:55
1199
原创 Spring Boot集成Flyway实现MySQL数据库自动化迁移
Flyway实现数据库版本管理的核心价值在于:将SQL脚本纳入版本控制,确保环境一致性。SpringBoot集成只需添加依赖、配置数据源和迁移目录,按V1__Desc.sql规范命名脚本即可自动迁移。生产环境需禁用危险操作,通过校验机制保障安全,建议采用审核后手动触发策略。遇到校验失败可通过repair命令修复,多环境使用不同配置文件管理。进阶功能支持Java回调和基线版本管理,使数据库变更完全可追溯,显著降低环境差异问题。在分库分表场景下,可采用多schema配置或自定义迁移策略实现分布式数据演进。
2025-08-07 17:53:09
1317
原创 RESTful API设计是如何构建简洁、可伸缩的Web服务
RESTful是一种基于表述性状态转移(REST)原则的API设计架构风格。它通过标准化HTTP协议特性,使系统具备简单性、可伸缩性和易于维护的特点。Roy Fielding博士在2000年首次提出REST概念,如今已成为现代Web服务的基石。RESTful不仅是技术规范,更是一种设计哲学。它通过资源定位、统一接口和无状态交互,构建出清晰、灵活的分布式系统。尽管HATEOAS在实际应用中尚未完全普及,但遵循核心REST原则的API已能显著提升系统的可维护性和扩展性。
2025-08-07 17:35:47
695
原创 Java虚拟线程何以称为高并发编程的革命性突破
虚拟线程不是线程池的优化替代,而是并发范式的升维。它解决了“阻塞即罪恶”的原始困局,让开发者用符合直觉的同步代码构建百万级并发系统,这正是Java高并发编程的全新纪元。传统线程池管理的是昂贵的操作系统线程(平台线程),核心价值在于复用线程资源,避免频繁创建销毁的开销。# 即使所有的用户线程(包括虚拟线程)都是守护线程的情况下,JVM 也不会立即退出,:线程数量受限于池大小(如固定10线程池),无法应对海量并发。:当线程执行I/O操作时,线程被阻塞却无法释放,造成资源闲置。
2025-08-07 17:27:53
581
原创 海量书籍数据存储方案:ShardingSphere分库分表实践与配置详解
摘要:面对图书数据激增带来的数据库性能瓶颈,ShardingSphere提供灵活的分片方案。本文分析了传统关系型数据库在TB级数据下的三大困境(查询延迟、单点风险、运维压力),详细介绍了ShardingSphere-JDBC与SpringBoot的整合实践,包括依赖配置、分片规则设置和关键参数解析。针对不同业务场景推荐适配的分片策略,并给出生产环境的最佳实践建议(控制分片规模、分布式事务处理等)。通过透明化分片技术,开发者可在不改动业务代码的情况下构建支持亿级数据的高效存储体系。
2025-08-07 17:17:05
608
原创 Spring Boot集成RabbitMQ实现高效消息队列
本文介绍了在SpringBoot项目中集成RabbitMQ实现异步消息通信的方法。首先阐述了消息队列在模块解耦、异步处理等方面的优势,然后详细讲解了集成步骤:添加依赖、配置连接、声明交换机和队列。重点展示了消息生产与消费的实现,包括支持事务的智能消息发送器和消息消费者。文章还提供了RabbitMQ的Docker安装指南,并分析了使用Fanout交换机的架构优势。最后建议了消息幂等性和死信队列等生产环境最佳实践。通过RabbitMQ集成,系统在性能、故障隔离和扩展性方面都得到了显著提升。
2025-08-07 17:00:53
440
原创 从独立缓存到二级缓存:基于 Spring Cache (Caffeine) + Redis 的高性能架构升级
本文介绍如何将独立的Caffeine本地缓存和Redis分布式缓存升级为智能二级缓存架构。该架构通过分层设计(Caffeine L1缓存和Redis L2缓存)解决单一缓存的局限性,实现高效访问(微秒级本地缓存响应90%+请求)、安全可靠(Redis故障自动降级)和成本优化(减少60%+Redis带宽)。关键实现包括自定义CaffeineRedisCache类处理两级缓存逻辑,以及通过Spring Cache整合缓存管理。该方案显著提升了系统性能,能轻松应对300%流量增长,使数据库请求降至1%以下。
2025-08-07 16:40:49
507
原创 Springboot项目引入mybatisplus实现数据库便捷访问,并启用自动代码生成
由于我们使用的模板引擎是velocity,所以选择模板文件里带.vm后缀的模板文件复制到test/resources/templates,再根据需要修改其中细节。MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。首先找到项目引入的mybatis-plus-generator依赖包,再打开里面的templates,选择其中需要的模板。接着需要在test/resources/templates引入mybatisPlus的模板文件。
2025-08-07 16:06:14
399
原创 Springboot集成Sentinel 组件实现基本限流功能
Sentinel 是面向云原生微服务的高可用流控防护组件,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保障服务稳定性。阿里巴巴在近10年双十一大促中成功验证了Sentinel在高并发场景下的可靠性。@Service// 业务逻辑return "订单创建成功";// 异常处理函数(可选)return "服务异常: " + ex.getMessage();注意:注解方式埋点不支持 private 方法。
2025-08-07 15:40:40
854
原创 springboot+vue前后端分离项目怎么分别做跨域配置
在Spring Boot和Vue前后端分离的项目中,跨域问题(Cross-Origin Resource Sharing,CORS)是一个常见的问题。跨域问题的产生是由于浏览器的同源策略(Same-Origin Policy)所导致的。同源策略是一种安全机制,它限制了一个源(协议、域名、端口)的文档或脚本如何与另一个源的资源进行交互。如果两个URL的协议、域名和端口都相同,则它们属于同源;否则,就属于不同源。
2025-08-06 23:17:46
403
原创 Redis缓存穿透与雪崩的解决方案与Java实战案例
摘要:本文针对Redis缓存穿透和雪崩问题提出了解决方案。缓存穿透可通过布隆过滤器预判数据存在性或缓存空值(设置短TTL)来避免频繁查询数据库;缓存雪崩可通过差异化过期时间、热点数据永不过期异步更新、多级缓存(本地+分布式)等策略预防。最佳实践建议采用组合方案:布隆过滤器+空值缓存防穿透,基础TTL+随机偏移防雪崩,配合Redis集群、多级缓存架构和监控预警系统,构建高可用缓存体系。
2025-08-06 22:31:32
211
原创 前后端分离的springboot项目上传文件时,文件的存储位置问题以及如何绕过springsecurity权限验证实现前端访问上传的静态图片
本文探讨了Springboot前后端分离项目中文件存储的最佳实践。针对生产环境JAR包只读的问题,分析了数据库、云存储和本地磁盘三种方案,最终选择本地磁盘存储。通过System.getProperty("user.dir")动态获取跨平台路径,实现开发环境(Windows)和生产环境(Linux)的统一管理。具体实现包括:配置YML文件定义上传路径,编写工具类处理路径转换,配置资源映射将请求转发到实际存储位置,并配置Spring Security放行图片访问请求。
2025-08-06 22:09:00
509
原创 springboot项目使用拦截器技术实现引入jwt做权限检验
本文介绍了使用JWT和拦截器技术实现接口权限校验的方案。首先通过引入jjwt依赖创建JwtUtils工具类,用于生成和解析包含系统标识的Token。然后实现TokenParseInterceptor拦截器,在preHandle方法中校验请求头中的Token。最后通过WebConfig配置类注册拦截器,设置需要拦截的API路径和排除路径。这种基于拦截器的权限校验方案具有良好扩展性,能有效管理大量接口的访问控制。
2025-08-06 21:37:32
251
原创 springboot的lombok插件失效问题解决方案
SpringBoot项目使用Lombok注解报错时,可通过两种方式解决:1)在IDEA的AnnotationProcessor设置中,勾选"Obtain processors from project classpath"或手动配置正确的Lombok路径;2)在pom.xml中明确指定合适的Lombok版本。注意IDEA可能会自动修改配置,建议重启后重新检查设置。
2025-08-06 21:22:43
270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2