
SpringBoot
文章平均质量分 69
快速搭建和部署 Spring 应用,简化配置和依赖管理。
一勺菠萝丶
做一个俗人,贪财好色,一世风流
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
安全守卫之争:Shiro vs Spring Security,谁是你的 Java 项目守护神?
像一个易于聘请、身手敏捷的独立保镖。优势在于简单、轻量、易集成、学习曲线平缓。非常适合非 Spring 项目或对安全需求不复杂的 Spring 项目。像 Spring 城堡的专属卫队司令。优势在于功能全面(尤其是 OAuth2)、与 Spring 深度集成、企业级支持。是 Spring Boot 项目的默认和推荐选择,尤其当需求复杂时。给小白的最直接建议:优先考虑 Spring Security。虽然开头难点,但它是“亲儿子”,集成度最高,长期来看功能和社区支持最好。从官方入门教程开始,一步步来。原创 2025-08-05 18:03:29 · 1094 阅读 · 0 评论 -
为什么抢单要查两次订单?外卖小哥的故事让你秒懂分布式锁双重检查
✅ 分布式系统安全操作 =获取锁+ 重新加载最新数据+ 验证业务规则+ 执行操作就像外卖小哥的生存法则:🔒 接到派单不冲动📞 先打电话问餐厅🛵 确认无误再出发双重检查就是系统里的那个"确认电话",它用极小的性能代价(一次数据库查询),避免了灾难性的业务错误。现在你明白为什么代码要多查那一次了吧?原创 2025-08-04 16:18:17 · 828 阅读 · 0 评论 -
高并发抢单系统核心实现详解:Redisson分布式锁实战
前置过滤:通过Redis标识快速拦截无效请求并发控制:Redisson分布式锁保证单订单串行处理状态验证:数据库状态机防止异常状态变更在日均百万级抢单请求的生产环境中,该方案成功将抢单冲突率控制在0.5%以下,平均响应时间<50ms,有效支撑了业务增长。后续可通过锁分段、热点订单隔离等策略进一步优化极端场景下的性能表现。原创 2025-08-04 16:11:31 · 737 阅读 · 0 评论 -
用分布式锁解决高并发抢单:小白也能懂的技术解析
分布式锁不是银弹,而是协调工具。用Redis标识做轻量级过滤用Redisson锁做临界区保护用数据库操作做最终一致性保证三者配合解决了高并发下的资源竞争问题。记住:好的分布式系统设计,永远是多种技术取长补短的组合艺术。技术选型建议中小系统:直接采用此方案超大型系统:可升级为Redis+Lua脚本原子操作金融级场景:增加数据库唯一索引兜底。原创 2025-08-03 22:29:43 · 504 阅读 · 0 评论 -
Java精确计算:BigDecimal除法、乘法及保留小数详解
本文通过实例详解BigDecimal的除法、乘法运算及小数保留技巧,解决浮点数精度问题,确保金融计算精准无误。原创 2025-07-14 16:20:02 · 459 阅读 · 0 评论 -
Spring核心注解揭秘:`@Configuration`与`@Component`的本质区别
用的场景定义配置类(如使用@Bean方法创建复杂对象(如数据库连接池)需要在@Bean方法中调用其他@Bean方法用@Component的场景标记业务逻辑组件(Service、Controller 等)不需要手动创建 Bean 的类重要原则✅ 在配置类中,永远通过方法参数注入 Bean(而不是调用@Bean方法)✅ 在普通组件中,永远用@Autowired注入 Bean(而不是手动调用@Bean方法)原创 2025-07-09 17:30:48 · 922 阅读 · 0 评论 -
Git重置(Reset)详解:Soft、Mixed、Hard、Keep四大模式的区别与使用指南
在使用Git进行版本控制时,git reset是撤销更改的核心命令。IDE(如IntelliJ IDEA)通常以图形化方式提供四种重置模式,下面我们逐一解析它们的区别和使用场景。原创 2025-07-08 18:18:55 · 1073 阅读 · 0 评论 -
深入浅出:Ruoyi 数据权限如何通过 `${params.dataScope}` 实现?
CEO 可以打开所有抽屉(查看全部数据)部门经理只能打开自己部门的抽屉普通员工只能打开自己名下的抽屉这种“不同人看到不同范围数据”的能力就是数据权限。自动为 SQL 查询添加 “WHERE 条件”,实现数据过滤。graph TDA[程序员] -->|1. 加注解 @DataScope| B(Service方法)A -->|2. XML写 ${params.dataScope}| C(SQL语句)D[用户登录] --> E[发起请求调用Service方法]原创 2025-07-07 15:37:48 · 701 阅读 · 0 评论 -
Spring Boot + MyBatis/MyBatis Plus:XML中循环处理List参数的终极指南
/!!!必须导入MyBatis的@Param包!!!// 使用@Param注解指定参数名必须使用正确的@Param包XML循环核心语法< foreach collection = " 参数名 " item = " 元素名 " open = " 开始符 " separator = " 分隔符 " close = " 结束符 " > #{元素名} </ foreach >原创 2025-07-04 11:18:37 · 718 阅读 · 0 评论 -
RuoYi数据权限详解:从字段到实现的全流程小白指南
用户身份(user_id)+ 部门归属(dept_id)+ 角色配置 = 数据访问范围。user_id解决“是不是你自己的数据”的问题;dept_id解决“是不是你部门的数据”的问题;角色配置则像“开关”,决定用户能打开多大的权限范围。原创 2025-06-28 11:05:31 · 475 阅读 · 0 评论 -
如何彻底禁用 Spring Boot 的热部署功能?| 小白也能懂的解决方案
如果你正在学习或使用框架,可能会遇到一个叫做的依赖。自动重启(热部署):当你修改 Java 代码后,应用会自动重启,无需手动停止再启动。(例如:修改了Controller的代码,刷新浏览器就能看到变化)静态资源实时更新:修改 HTML、CSS、JS 等文件后,浏览器会自动刷新页面。(适合前端调试)开发者友好配置:默认关闭模板引擎的缓存(如 Thymeleaf),方便调试时实时看到修改效果。场景操作效果需要热部署保留devtools依赖自动重启、实时刷新彻底禁用热部署移除devtools。原创 2025-05-20 10:27:56 · 835 阅读 · 0 评论 -
Redis实现分布式锁的进阶版:Redisson实战指南
避免手动处理复杂边界条件获得生产级的可靠性保证轻松扩展更多分布式功能。原创 2025-05-18 16:52:26 · 1148 阅读 · 0 评论 -
Redis实现分布式锁的原始方式详解:从入门到实践
通过Redis实现分布式锁需要严格遵循四个基本原则。虽然本文展示了基础实现方案,但在实际生产环境中,建议使用经过验证的框架(如Redisson),它们已经处理了续约、重试、集群容错等复杂问题。记住:分布式系统的可靠性永远不能完全依赖单一中间件,必须结合业务场景设计兜底方案。原创 2025-05-18 16:45:19 · 628 阅读 · 0 评论 -
Idea 设置编码UTF-8 Idea中 .properties 配置文件中文乱码
Idea 设置编码UTF-8 Idea中 .properties 配置文件中文乱码。二、配置文件中文乱码。原创 2025-05-14 19:25:23 · 1418 阅读 · 0 评论 -
Java中BigDecimal与double的精确之争:为什么doubleValue()是危险的?
操作正确方式错误方式比较是否相等判断正负核心原则:涉及BigDecimal的数值比较或计算时,始终优先使用其原生方法(如compareTosubtract),避免转换为double或float。原创 2025-05-13 23:14:21 · 479 阅读 · 2 评论 -
深入浅出:Spring Boot 中 RestTemplate 的完整使用指南
在分布式系统开发中,服务间通信是常见需求。作为 Spring 框架的重要组件,为开发者提供了简洁优雅的 HTTP 客户端解决方案。本文将从零开始讲解 RestTemplate 的核心用法,并附赠真实地图 API 对接案例。原创 2025-05-11 14:53:44 · 926 阅读 · 0 评论 -
Spring Boot 中处理 JSON 数值溢出问题:从报错到优雅解决
的范围(-2147483648 ~ 2147483647),导致 JSON 解析失败!,一步到位解决问题!原创 2025-04-23 15:44:19 · 657 阅读 · 0 评论 -
使用 Docker 查看 Elasticsearch 错误日志
通过 Docker,我们可以方便地运行和管理 Elasticsearch 容器,并利用命令快速查看错误日志。原创 2025-01-02 21:52:33 · 1668 阅读 · 0 评论 -
Python 输出华丽分割线的方式大全
在 Python 编程中,有时候我们需要为日志、输出结果或者调试信息添加一些分割线,方便视觉上的区分。这篇文章将介绍几种常见的方法和一些创意的分割线设计,帮助你让代码输出更具美感和个性化。原创 2024-12-28 14:47:37 · 688 阅读 · 0 评论 -
深入理解 `@TableId(type = IdType.AUTO)`:使用方法及其与其他主键生成策略的区别
是一个常见的配置选项,它指定了主键的生成策略。在实际开发中,如何配置主键生成策略对数据库的性能和稳定性有着重要影响。表示主键由数据库自动生成,通常与自增长字段一起使用。这意味着,主键的值在插入时由数据库自增,而不是由程序代码显式指定。通常情况下,主键字段需要具有唯一性,而且数据库会根据该字段的值来区分每一条记录。雪花算法是一种分布式ID生成算法,确保在分布式环境下每个服务生成的主键唯一且递增。配置表示主键为分布式的 UUID,通常与分布式系统搭配使用,确保不同节点生成的主键不会冲突。原创 2024-11-15 12:03:05 · 2325 阅读 · 0 评论 -
微服务中的技术使用与搭配:如何选择合适的工具构建高效的微服务架构
不同的技术能够解决不同的问题,比如服务发现、API网关、服务间通信、数据存储等。而API网关的作用是作为客户端和微服务之间的中介,它将客户端的请求路由到正确的服务,并处理跨服务的功能,如认证、负载均衡、限流等。微服务架构的一个重要特性是各个服务是独立部署的,因此它们的地址(IP、端口等)是动态变化的。微服务架构提倡每个服务拥有自己的数据库(或数据存储),这就要求我们在数据库的选择和管理上也要非常灵活。作为API网关,接收所有的外部请求,并将它们路由到正确的微服务,如用户服务、商品服务等。原创 2024-11-15 11:59:38 · 1055 阅读 · 0 评论 -
Java微服务架构概述:让复杂的系统变得简单
尽管每个部门是独立的,但它们之间会通过超市的系统进行协调,比如顾客买了一些水果,系统会自动更新库存。而微服务架构则与此不同,它把一个大型应用拆分成多个小的、独立的服务,每个服务完成系统中的一个具体功能。在微服务架构中,每个服务就像这个超市中的一个部门,每个服务负责某一方面的功能,彼此之间独立但又互相协作。比如,一个服务用Java开发,另一个服务用Python开发,甚至可以使用不同的数据库。随着微服务数量的增加,如何监控和管理大量的微服务实例,确保它们的健康和稳定运行,成为一个复杂的挑战。原创 2024-11-15 11:58:29 · 591 阅读 · 0 评论 -
深入理解Elasticsearch的`_source`字段与索引优化
sourceElasticsearch 提供了灵活的_source配置,允许我们通过excludes来排除不需要存储的字段。这样做的好处包括节省存储空间、提高写入效率、减少网络负担,以及确保数据隐私。同时,即使字段不被存储,它们依然可以被索引,用于查询和检索。理解并合理配置_source字段,能有效优化系统性能,适应不同的应用场景需求。原创 2024-09-07 14:33:00 · 1895 阅读 · 0 评论 -
Java Stream API 的应用:提取并处理多属性集合
何利用 Java Stream API 进行高效的数据提取和处理。通过flatMapfilter和distinct等操作,我们能够从复杂的数据结构中提取和处理所需的信息,同时保持代码的清晰和高效。原创 2024-08-20 09:23:41 · 802 阅读 · 0 评论 -
Java控制流和循环结构详解
在Java编程中,控制流语句是基本构建块之一,它们使我们能够根据不同的条件执行不同的代码路径,以及重复执行代码块。本文将详细介绍Java中的各种控制流语句和循环结构,包括它们的用法、示例和最佳实践。原创 2024-07-31 10:01:10 · 527 阅读 · 0 评论 -
成功解决:java.security.InvalidKeyException: Illegal key size
在集成微信支付到Spring Boot项目时,可能会遇到启动报错的问题。这是由于Java加密扩展(JCE)限制了密钥的长度。幸运的是,我们可以通过简单的替换文件来解决这个问题。原创 2024-07-30 10:13:58 · 1787 阅读 · 0 评论 -
SQL查询优化:动态选择返回字段
在数据库操作中,我们经常遇到需要根据字段的存在与否动态选择返回值的场景。本文通过一个具体的例子,展示如何使用SQL语句来优化这种情况的处理,确保我们的查询结果既灵活又高效。原创 2024-07-26 10:54:58 · 733 阅读 · 0 评论 -
深入理解 SQL 中的 DATEDIFF 函数
DATEDIFF此函数返回两个日期之间的天数差。具体来说,它计算从date2到date1的天数,如果date1晚于date2,结果为正;如果date1早于date2,结果为负。原创 2024-07-25 11:23:35 · 2631 阅读 · 0 评论 -
Linux常用命令大全
Linux是一个功能强大的操作系统,广泛应用于服务器、开发和嵌入式系统中。掌握一些基本的Linux命令对于高效地使用系统至关重要。本文将介绍一些常用的Linux命令,帮助你提升操作效率。原创 2024-07-23 11:46:37 · 489 阅读 · 0 评论 -
深入探索 SQL 中的 LIKE 右模糊匹配(LIKE RIGHT)与左模糊匹配(LIKE LEFT)
在 SQL 中,LIKE子句用于在WHERE条件中搜索列中的数据,这些数据符合一定的模式。它常常与(表示任意字符序列)和(表示单一字符)通配符一起使用。原创 2024-07-18 16:40:09 · 4222 阅读 · 0 评论 -
深入理解并使用 MySQL 的 SUBSTRING_INDEX 函数
是 MySQL 中的一个字符串函数,用于返回字符串从开始位置到指定的分隔符的第 N 次出现之前的部分。这个函数尤其在处理包含分隔符的字段时显得非常实用,比如文件路径、URLs、复合字符串等。原创 2024-07-18 16:25:47 · 3078 阅读 · 0 评论 -
使用MyBatis-Plus中的IPage和LambdaQueryWrapper进行分页查询
通过上述步骤,我们可以在MyBatis-Plus中实现一个基于的类型安全查询,并结合IPage接口实现分页功能。这种方式不仅提高了代码的可读性和维护性,也使得分页实现更为简洁和高效。原创 2024-07-18 14:16:32 · 2593 阅读 · 1 评论 -
MyBatis-Plus中实现自定义复杂排序逻辑
首先,我们创建一个实例。如果查询模型(model)为空,我们直接返回一个空的实例。为了根据gateNo进行排序,我们使用last方法来添加自定义的SQL排序片段。这里使用CASE语句来处理特殊值“天”,并使用CAST函数和来分离和转换字符串为数值。String customOrderSql = "CASE WHEN gate_no LIKE '天-%' THEN 2 ELSE 1 END, " +原创 2024-07-18 11:22:11 · 1773 阅读 · 0 评论 -
如何使用Java和高德地图API将经纬度转换为地理位置信息
通过以上步骤,你可以轻松地在任何Java应用中实现经纬度到地理位置的转换。这对于开发地理信息系统(GIS)、位置服务或任何需要地理编码的应用都非常有用。希望这篇教程能帮助你在项目中实现位置转换功能。如果有任何疑问或者需要进一步的帮助,请在下方评论区留言。原创 2024-05-11 15:42:18 · 2762 阅读 · 0 评论 -
Mybatis plus自定义分页
这种方法在大多数情况下都非常高效。本文将介绍一种在服务层进行分页处理的策略,这种策略提供了更高的灵活性,适用于复杂的业务逻辑处理。在某些复杂的业务场景中,我们可能需要对数据集进行多层过滤、排序或其他预处理操作,而这些操作可能需要在应用层面完成,而非数据库层面。为了解决上述问题,我们可以将分页逻辑从数据库层移到服务层,即在获取到全部相关数据后,在应用服务器上进行分页处理。服务层分页是一种有效的数据处理策略,它通过在应用层面提供数据分页,使得开发者可以在满足复杂业务需求的同时,保持系统的响应性和灵活性。原创 2024-07-16 11:12:39 · 684 阅读 · 0 评论 -
理解和解决Spring框架中的事务自调用问题
在Spring中,如果在一个被标记的方法内部直接调用同一个类的另一个方法,第二个方法的事务管理将不会被触发。这是因为Spring事务管理默认是通过代理实现的,而这种内部调用绕过了Spring的代理机制。原创 2024-07-09 18:23:18 · 835 阅读 · 0 评论 -
如何在Java中使用Levenshtein距离实现字符串相似度匹配
Levenshtein距离是由俄罗斯科学家Vladimir Levenshtein在1965年提出的,用以量化两个字符串之间的差异。这种度量方式计算将一个字符串转换成另一个字符串所需要的最少编辑操作次数,包括插入、删除和替换字符。通过这个例子,我们可以看到Levenshtein距离是如何帮助我们在实际应用中匹配用户问题的。这种方法不仅适用于问答系统,还可以用于任何需要衡量文本相似度的场景,如搜索引擎优化、数据清洗等。原创 2024-06-27 14:40:28 · 1694 阅读 · 0 评论 -
成功解决ES高亮内容引起的字段显示不一致问题
在处理搜索引擎(如Elasticsearch)结果时,常见需求之一是对用户搜索的关键词进行高亮显示,这有助于用户快速识别搜索结果为何与其查询相关。但在实际应用中,如果处理不当,直接使用高亮片段可能会导致原始数据的部分内容丢失。原创 2024-06-25 18:44:49 · 1128 阅读 · 0 评论 -
Java开发接口设计的原则
在现代软件开发实践中,接口设计扮演着至关重要的角色。它不仅关乎代码的结构和未来的可维护性,还直接影响到软件系统的灵活性和扩展性。本文将通过实例详解几个核心的接口设计原则,帮助开发者更好地编写和管理接口,从而提升软件的整体质量。原创 2024-06-21 17:31:44 · 604 阅读 · 0 评论 -
Java 8 Stream API与日期时间处理:按年月日分组
在Java 8中,Stream API提供了一种高效且表达式丰富的方式来处理集合数据。当我们需要对集合中的对象进行分组时,是一个非常实用的工具。此外,Java 8引入的新日期时间API(位于java.time包中)让日期和时间的操作变得更加直观和易于管理。原创 2024-06-18 15:38:31 · 1352 阅读 · 0 评论