- 博客(242)
- 收藏
- 关注
原创 Springboot绑定Date类型时出现日期转换异常问题
场景推荐方案前端传参示例GET + URL参数/path?POST + 表单提交POST + JSON请求体需要同时支持所有格式双注解+Java8 API任意格式“表单数据用,JSON数据用,Java8时间类型是终极解决方案”
2025-07-17 15:23:39
292
原创 Mybatis:useGeneratedKeys 在 更新操作(由 ON DUPLICATE KEY UPDATE 触发) 不会回填 ID
MyBatis 的 useGeneratedKeys 在 更新操作(由 ON DUPLICATE KEY UPDATE 触发)时 不会回填 ID,仅在插入新数据时生效。,它是 MyBatis 官方推荐的标准做法,可靠且高效。
2025-07-15 09:59:04
262
原创 SpringBoot:方法返回ResponseEntity<User> 和直接返回User的区别
特性直接返回对象HTTP状态码可自定义固定为200(或通过注解设置)响应头控制支持不直接支持错误处理方法内直接处理依赖全局异常处理器代码复杂度稍高(需手动构建低(代码更简洁)适用场景复杂API(多状态码、自定义头)简单API(状态码固定)
2025-07-10 16:28:28
353
原创 Redis:分组与设备在 Redis 中缓存存储设计
代码实现了如添加设备到分组、移除设备、查询分组下设备以及设备详细信息的获取和更新等核心功能,同时还可以设置缓存的过期时间来控制缓存数据的有效期。
2025-07-09 16:16:37
436
原创 使用 Lombok 的 @Builder注解时,如果子类继承自父类,默认情况下构建器只会包含子类自己定义的字段,而不包含父类的字段
使用@Builder时,父类字段默认不会出现在子类构建器中。推荐使用解决继承场景下的构建器问题,它能自动包含父类和子类的所有字段。确保 Lombok 版本在 1.18.16 以上,以支持注解。
2025-07-09 11:09:25
187
原创 Spring Boot:影响事务回滚的几种情况
如果你坚持在 Controller 中处理异常,可以使用。这三个操作需要在同一个事务中执行,任何一步失败都要回滚。
2025-07-08 13:25:19
275
原创 MyBatis:@MapKey
告诉 MyBatis 使用结果集中的哪个字段作为 Map 的键(Key),剩余字段会被封装为值(Value)。这种方式无需依赖 MyBatis 的特殊注解,但需要在代码中手动处理转换逻辑。常用于将多行记录按某个字段分组,转换为一个键对应多个值的 Map 结构。注解外,MyBatis 还提供了其他几种方式来实现将查询结果映射为。是 MyBatis 提供的一个注解,用于将查询结果集转换为。形式时指定键(Key)的来源。手动处理结果集,不依赖注解。最直接的方法是先查询出。
2025-07-08 11:23:18
437
原创 ZooKeeper 访问控制列表(ACL)
ZooKeeper 作为分布式协调服务,ACL(Access Control List)机制是其安全体系的核心,用于控制对 ZooKeeper 节点(znode)的访问权限。根据不同的 Scheme 定义用户或实体的身份,例如。认证),此时权限为所有匹配 ACL 的权限并集。客户端可能拥有多个身份(如同时通过。ACL 由三个关键部分组成,形成。通过 ZooKeeper 客户端(每个 znode 内部维护一个。
2025-07-07 14:29:38
542
原创 示例:Springboot 中ZooKeeper配置管理
根据您的需求,我对ZooKeeper配置管理系统进行了全面重构,采用更规范的命名和配置方式。负责加载和管理应用配置,替代原。负责配置的管理和缓存,替代原。
2025-07-07 14:28:04
323
原创 Springboot 如何加密数据库连接相关配置信息
的原生加密功能旨在确保数据库连接配置中的关键信息(尤其是数据库密码)不以明文形式存在于配置文件中,从而增强系统的安全性。上述提到的配置属性是启动加密解密流程的关键配置项,其中明确告知要对相关配置进行解密,而则指定了解密所依赖的密钥,这里的通常会在运行时通过合适的方式(如环境变量、系统属性)被替换为真实的密钥内容。插件为项目提供了一种便捷且通用的配置加密方式。它允许开发者对配置文件中的各类敏感信息进行加密,不仅仅局限于数据库连接配置。通过自定义加密密钥,并将需要加密的配置值以特定格式(如ENC(加密内容)
2025-07-07 14:25:59
1914
原创 MySQL查询优化:主表 JOIN 关联多个从表的优化策略
设备属性表(),包含attr_id(属性编号)和attr_name(属性名称)两个字段,用于记录设备的各类属性相关信息;设备型号对应关系表(),包含(主设备型号编号)、(主设备对应的属性编号)、(子设备型号编号)、(子设备对应的属性编号)四个字段,用于体现不同设备型号之间基于属性的关联关系。现在想要对设备型号对应关系表进行查询操作,目的是在查询结果中能够展示出对应的属性名称(即通过关联设备属性表,获取attr_name表结构说明设备属性表(device_attributes)attr_id。
2025-07-04 11:19:59
209
原创 MySQL 8.0:窗口函数
窗口函数(Window Function)对查询结果集的子集(“窗口”)进行计算,保留原始行而非聚合为单行,适合复杂分析(如排名、累积和)。
2025-07-04 10:10:44
283
原创 SpringBoot 同一套代码部署不同服务的考量:以用户长连接(user-comet)和 (设备长连接)device-comet为例
在软件开发与部署过程中,常常会面临一个决策:是否可以使用同一套代码来部署不同的服务,比如在处理用户连接的 和处理设备连接的 服务场景下。这一做法既有其优势,也存在一定的劣势。使用同一套代码部署 和 服务,能够显著减少重复开发工作。因为这两个服务可能都依赖相同的底层网络通信框架、基础的数据处理逻辑等,复用这些通用代码意味着无需在两个服务中分别重新编写,从而节省大量的开发时间和人力成本。例如,Netty 长连接相关的基础配置和部分通用的消息处理逻辑,在两个服务中都能复用。同时,在后续维护阶段,当需要对这
2025-07-03 14:58:51
602
原创 使用 Docker 和 Kubernetes 部署同一套代码不同服务
通过 Docker 和 Kubernetes 这两种强大的容器化及容器编排工具,我们可以方便且高效地基于同一套代码部署不同的服务,满足如user-comet和这样针对不同业务场景的需求。Docker 适用于在本地开发、测试以及简单部署场景中快速构建和运行容器化服务;而 Kubernetes 则更侧重于在生产环境中提供强大的容器编排、自动扩缩容、高可用保障等功能,助力构建健壮的微服务架构。
2025-07-03 14:30:07
590
原创 基础知识:mysql-connector-j依赖
是 MySQL 官方提供的,用于在 Java 应用程序中连接和操作 MySQL 数据库。它是 MySQL 8.0 版本之后的标准驱动名称,替代了旧的。</</</</com.mysql8.0.33</</</</根据你的 MySQL 版本,选择对应的 JDBC 驱动依赖即可。在 MySQL 客户端(如mysql。
2025-07-02 14:55:40
398
原创 分布式定时任务:xxl-job
注意:可以选择只保留 xxl-job-admin 模块,然后通过 Maven 引入 xxl-job-core 依赖,这样的方式能让项目结构更加简洁,同时也便于依赖管理和后续的升级维护等操作。它是 MySQL 8.0 版本之后的标准驱动名称,替代了旧的。访问管理界面:http://localhost:8080/xxl-job-admin。的架构设计,这种设计带来了诸多优势,比如高可用性、可扩展性以及便于分布式部署等。这是一个独立的Web应用,负责任务的管理和调度工作。XXL - Job采用的是。
2025-07-02 14:49:31
1054
原创 分布式定时任务:Elastic-Job-Lite
Elastic-Job-Lite 是一款由 Apache 开源的轻量级分布式任务调度框架,属于 ShardingSphere 生态体系的一部分。它专注于,支持弹性伸缩、分片处理、高可用等特性,且不依赖中心化架构。
2025-07-02 13:34:48
593
原创 Redisson 与 Java 驻内存数据网格:分布式缓存的高可用解决方案
Redisson 不仅仅是一个 Redis 连接工具,它通过Java 驻内存数据网格简化分布式编程:开发者无需关心底层 Redis 细节,直接使用 Java 接口提供高级分布式功能:如可重入锁、分布式集合、原子变量等保障系统可靠性:支持 Redis 集群和故障转移,自动处理网络异常提升开发效率:减少重复代码,降低分布式系统的开发难度对于复杂的分布式系统,Redisson 提供的数据网格能力比普通 Redis 客户端更具优势。
2025-07-02 09:29:28
502
原创 Java 驻内存数据网格
驻内存数据网格是一种分布式的内存数据存储和计算平台,它将数据存储在内存中(区别于传统的基于磁盘存储为主的数据管理方式),并且通过网络连接多个节点形成一个网格状的架构,以提供高性能、可扩展性以及高可用性的数据处理能力,供分布式应用程序使用。在Java环境下,像Redisson这样的库就是基于Java语言实现了驻内存数据网格的相关功能。
2025-07-02 09:19:30
432
原创 分布式锁的实现方式:使用 Redisson 实现分布式锁( Spring Boot )
自动续约避免锁提前释放丰富的锁类型(可重入、公平、读写锁)支持多种Redis部署模式(单机、集群、哨兵)简化的API降低使用门槛在生产环境中,推荐优先使用Redisson而非手动实现Redis锁,以减少潜在问题并提高开发效率。
2025-07-01 16:29:06
1516
1
原创 分布式锁实现方式:基于MySQL的分布式锁实现(Spring Boot + MyBatis)
Data/*** 获取锁(插入记录)*//*** 释放锁(删除记录)*//*** 检查锁是否存在*//*** 清除过期的锁*/</insert></delete></select></delete></mapper>
2025-06-27 16:20:01
336
1
原创 分布式锁的概念与应用场景
是一种在分布式系统环境下,用于保证多个进程/节点对共享资源实现互斥访问的机制。其本质是通过某种中间件(如Redis、ZooKeeper等)实现跨节点的锁控制,确保在分布式环境中,同一时刻只有一个客户端能获取锁并执行关键操作,避免出现并发冲突。
2025-06-27 10:41:46
251
原创 APP热更新静态资源:基于 HBuilder Wap2App 功能与 OSS 存储的静态资源在线预览路径适配问题
原理:APP在启动时,通过网络请求向服务器获取静态资源的更新信息。例如根据版本号获取更新信息,下载有更新的静态资源文件到本地指定的目录,最后在APP中加载这些更新后的本地文件。示例:可以先获取当前APP的版本信息,再通过接口获取服务器上APP版本的基本信息,包括资源包的URL等。判断是否需要更新,如果需要,则通过插件下载资源包,下载完成后解压并替换本地的静态资源文件。使用 HBuilder 的 Wap2App 功能打包静态资源时,会生成包含哈希值的 HTML、JS 和 CSS 文件。路径引用问题。
2025-06-27 09:43:37
1103
原创 分布式环境下 Spring Boot 项目基于雪花算法的唯一 ID 生成方案
分布式系统是指将多个独立的计算节点通过网络连接,协同完成同一目标的系统架构。确保了在分布式环境下,即使多个用户服务节点同时处理创建用户请求,生成的 ID 也不会冲突。
2025-06-25 17:22:12
1231
2
原创 实现在线访问OSS中的PDF、图片等文件(OSS不支持在线访问,而是默认下载)
当 OSS 返回的响应头中Content-Disposition设置为attachment时,浏览器会强制下载文件。需要注意的是,对于大的PDF文件,这种简单的流复制方式可能在性能上有一定局限。),并将从OSS获取到的文件内容流转发给浏览器,实现在线预览的效果。,使得浏览器尝试在线预览而不是自动下载,同时设置正确的。通过这个接口代理请求,会修改响应头,将。
2025-06-25 09:31:52
322
原创 MySQL优化:使用 LIMIT 进行分页查询时,偏移量过大造成查询性能降低问题分析
尽量让查询所需的列都包含在索引中,这样在查询过程中可以直接从索引里获取数据,减少回表操作(回表指的是先通过索引找到主键,再根据主键去数据表中查找其他列数据的过程)。先通过一个子查询快速定位到我们真正想要获取的数据所在的 id 范围(也就是 “关键的 id 段”),然后再通过关联操作获取这些 id 对应的数据行的完整信息。(上次登录日期)等,现在需要按照用户的注册日期倒序分页展示用户信息,且要获取从第 5000 条记录开始的 10 条用户记录。的联合索引,让查询直接从索引中获取这些数据,提升效率。
2025-06-24 13:23:52
863
原创 Mysql 数据库中设备实时状态表水平分表
在使用 Mysql 数据库存储设备上报日志时,存在一张设备实时状态表,随着时间推移,数据量变得十分庞大。为了更好地管理和查询数据,提高数据库性能,需要对该表进行水平分表操作。同时,存在分页查询的需求,不过仅在针对单个设备状态查询时才需要分页展示结果,以方便查看设备在不同时间段的状态信息,避免一次性返回大量数据影响性能和使用体验。
2025-06-23 15:35:52
1591
原创 Java 8新API总结
类中的一个静态方法,用于创建一个可能包含空值的容器对象。它的核心作用是将一个可能为。中,从而更优雅地处理空值,避免直接调用可能引发。是 Java 8 引入的。
2025-06-20 16:56:58
171
原创 Mysql优化:读写分离和分库分表
MySQL读写分离是优化高并发数据库系统的核心策略之一,通过将写操作(INSERT/UPDATE/DELETE)定向到主库(Master)、读操作(SELECT)分发到从库(Slave),有效分担主库压力,提升查询性能和系统扩展性。:中间件方案中,ProxySQL适合高并发读写分离,ShardingSphere支持分库分表+分布式事务,MyCAT适合复杂分片场景。
2025-06-19 16:44:47
367
原创 Springboot 使用Redis 实现定时任务
Spring Data Redis ≥ 2.3.0:该版本引入了 setIfAbsent(key, value, duration) 方法,支持原子性设置键值+过期时间(对应 Redis 的 SET key value NX EX seconds 命令):在分布式环境中,通过 Redis 锁确保同一时间只有一个实例执行定时任务。:避免键空间通知的丢失风险,适合任务量大的场景。,通过定时任务查询到期的任务并执行。:利用 Redis 的键过期事件(:将任务执行时间作为。
2025-06-19 12:40:31
973
原创 在 MyBatis 中处理一对一关联时,使用 <association> 标签
地址数据需懒加载、学生表数据量较大时避免一次性 JOIN 的性能压力。:分两次查询数据库,先查学生,再根据学生表的外键查地址。:单次 JOIN 查询,通过结果集映射直接封装关联对象。:需一次性高效加载所有数据,避免多次查询的延迟问题。),否则 MyBatis 无法区分关联表字段。)可在多个查询中复用映射规则,避免重复配置。属性引用已定义的映射(如。),同一关联对象(如。JOIN 查询中必须为。
2025-06-17 16:19:08
944
原创 MyBatis :何时选择连接查询,何时使用<collection>标签?
一对多关联连接查询是主流选择,因其性能可控、实现直观;嵌套查询仅在深度延迟加载场景有价值。多对多关联MyBatis不推荐直接实现,应通过中间表拆解为两个一对多,避免复杂度和性能陷阱。
2025-06-17 15:55:12
1449
原创 Spring Boot 数据校验: Bean Validation 注解、分组校验与全局异常处理
注解作用示例自定义校验器在 Spring Boot 2.3.x 版本中,Bean Validation 参数校验的使用方式与之前版本略有不同,尤其是在错误处理和响应格式的自定义上。从 Spring Boot 2.3 开始,spring-boot-starter-validation 不再默认包含,需要手动添加依赖错误属性的获取方式略有变化,推荐使用 ErrorAttributeOptionsSpring Boot 2.3.x 中推荐使用。
2025-06-17 13:48:53
798
原创 Spring Boot 和 Spring Security 实现 JWT 认证
在 Spring Security 中,UsernamePasswordAuthenticationToken 的 authorities 参数用于注入当前用户的权限集合(Collection<?JWT 是一种开放标准(RFC 7519),用于在网络应用间安全传递 JSON 格式的声明信息。JWT 在微服务、跨域单点登录(SSO)场景中优势显著。JWT 由三部分组成,以点号。
2025-06-16 16:13:20
1847
springboot集成阿里oss实现文件上传(复制粘贴可用)
2025-06-22
mongodb可视化工具(兼容较低版本使用)
2025-01-23
能用Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
2024-12-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人