- 博客(501)
- 资源 (6)
- 收藏
- 关注
原创 MyBatis映射MySQL中的JSON数据类型
MySQL插入JSON数据时报错"Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'"的解决方案包括:1)使用String或Map类型直接映射;2)推荐使用自定义TypeHandler结合Jackson库处理JSON转换;3)MyBatis-Plus用户可用注解简化配置;4)XML映射中需明确指定typeHandler。问题根源在于二进制字符集无法直接转为JSON值,通
2025-11-12 11:54:12
488
原创 No typehandler found for property xxxx
MyBatis映射文件解析错误:未找到类型处理器 摘要: 错误发生在解析CouponMapper.xml文件时,系统提示"Notypehandlerfoundforpropertyrule"。原因是MyBatis在处理"rule"属性时找不到合适的类型处理器。解决方案是自定义JsonTypeHandler类,继承BaseTypeHandler,实现JSON数据的转换处理。该处理器能将Java对象转换为JSON字符串存入数据库,也能将数据库中的JSON字符串反序列化为J
2025-11-11 15:26:44
120
原创 BigDecimal Postman 返回正常精度前端接收不正常(前后端交互丢失精度)
摘要:BigDecimal类型字段在前端交互时出现精度丢失问题,如"12345671234567.12345"变为"12345671234567.123"。主要原因是JavaScript数字类型限制和JSON序列化机制。解决方案包括:1)使用Jackson的@JsonSerialize(using=ToStringSerializer.class)注解将BigDecimal序列化为字符串;2)直接使用String类型;3)配置Jackson强制BigDecimal转为
2025-10-16 09:37:50
444
原创 数据库外键约束规则
摘要:ONDELETERESTRICT是数据库外键约束规则,用于阻止删除父表中被子表引用的记录,确保数据完整性。当子表存在关联记录时,系统会阻止删除操作。与其他约束不同,RESTRICT会直接阻止删除,而CASCADE会级联删除子表记录,SETNULL则将外键设为NULL。该约束适用于需要保持数据强关联的场景(如订单与订单项)。使用时需检查存储引擎支持(如InnoDB)和约束配置是否正确。
2025-10-14 10:03:23
64
原创 后端怎么确保与前端传递的价格一致
后端确保与前端价格一致的技术方案:1.采用双重计算校验机制,后端独立计算并与前端提交金额比对;2.实施安全防护,包括参数签名验证和事务性操作;3.通过预提交接口和统一数据类型优化协同;4.建立日志审计和数据库约束等监控兜底措施。方案结合实时计算、防篡改和事务控制,有效保障价格一致性,适用于各类交易场景。
2025-10-13 15:25:29
380
原创 购物车、订单表、订单详情表数据库设计
本文介绍了购物车系统的数据库表设计,主要包括用户表、商品表、购物车表和订单表等核心结构。设计方案遵循关系数据库范式,采用主表+明细表结构,通过外键建立关联关系。重点说明了购物车详情表的设计以解决范式问题,订单表的状态跟踪机制,以及商品表的属性管理。同时提供了MySQL建表示例,包含字段定义、外键约束和索引优化建议,强调时间戳自动维护、级联删除策略和价格实时查询等关键设计原则,确保数据一致性和查询性能。
2025-10-13 11:36:42
76
原创 MySQL排序规则utf8mb4_0900_ai_ci解析
MySQL8.0新增的utf8mb4_0900_ai_ci排序规则基于Unicode9.0标准,支持四字节存储和精确排序,但不兼容低版本MySQL。该规则不区分大小写和音调,适合新项目使用。若需兼容老系统,可替换为utf8mb4_general_ci(性能优先)或utf8mb4_unicode_ci(准确性优先)。解决方案包括升级MySQL8.0+或批量修改SQL文件中的排序规则。
2025-10-13 10:48:11
363
原创 java中的TimeZone、ZoneId和ZoneOffset
Java时区处理对比:TimeZone与ZoneId/ZoneOffset TimeZone(传统方式):处理时区偏移和夏令时,支持通过ID获取时区(如"Asia/Chongqing"),但线程安全性需注意。JDK8后推荐使用ZoneId替代。 ZoneId(Java8+):表示地理时区(如"America/New_York"),支持固定偏移和区域时区,自动处理夏令时转换,与LocalDateTime等配合使用更现代。 ZoneOffset:专用于固定时区偏移(如+0
2025-10-11 09:30:08
578
原创 java8提取list中对象有相同属性值的对象或属性值
本文介绍了三种Java Stream处理对象列表中重复数据的方法:1) 使用Collectors.groupingBy按属性分组后筛选计数大于1的条目,可获取重复对象或生成属性值映射;2) 通过Collectors.toMap统计属性出现次数,过滤出重复值;3) 使用TreeSet按特定属性去重。文中提供了完整代码示例,并强调需正确实现equals()和hashCode()方法,注意并行流线程安全问题。这些方法支持单属性和多属性组合的重复数据处理,结果可输出为列表、Map或拼接字符串格式。
2025-10-09 09:40:11
287
转载 Springboot使用redisson + 自定义注解实现消息的发布订阅(解决方案)
Redisson是一个基于Redis的Java分布式框架,提供分布式集合、锁和对象等服务。文章介绍了Redisson的基本功能和使用场景,包括分布式缓存、锁和任务调度。通过自定义注解实现消息发布订阅的优雅解决方案,详细展示了从依赖配置、初始化客户端到实现监听器的完整流程。这种方案避免了手动编码的繁琐,适合不需要引入MQ中间件的小型场景。
2025-10-09 08:53:17
73
原创 使用rabbitmq发送消息时消息体转换报错
【摘要】RabbitMQ消息处理报错,主要原因为JSON反序列化类型不匹配:期望String类型但实际收到Object。错误发生在"pay.queue"队列的消息处理过程中,虽然配置了Jackson2JsonMessageConverter序列化方式,但队列绑定配置错误(将delayProtocolValidQueue错误绑定到pay.key)。业务功能正常但持续报错,三天后发现是交换机与队列绑定配置问题导致。解决方案包括:1)统一配置消息转换器;2)修正队列绑定关系。该案例表明MQ配置
2025-09-25 18:05:24
179
原创 docker单个nginx容器部署多个vue项目
摘要:本文介绍Docker部署多个Vue项目的三种方法:1)独立容器法,为每个项目创建单独容器,通过不同端口访问;2)Nginx反向代理法,使用单个容器通过路径区分不同应用;3)分域名部署法,通过不同域名访问各项目。重点详解了前两种方法的实施步骤,包括Dockerfile编写、Nginx配置和容器运行命令,并比较了隔离部署与资源优化的适用场景。部署时需注意Vue项目的publicPath设置和Nginx的路径匹配规则。
2025-09-24 01:11:23
164
原创 在ubuntu中使用ufw命令开放端口后,docker部署的应用端口无法访问
摘要:用户在Ubuntu系统中尝试开放端口时遇到问题。最初使用firewalld未成功,后改用ufw开放22端口后可以访问,但导致Docker容器无法连接。通过重启Docker服务解决了问题(sudo service docker restart)。其他可能的解决方案包括:1)检查NAT转发规则;2)重置docker0网络(pkill docker,清除iptables规则等)。文章指出该问题可能与防火墙规则冲突有关,建议需要时深入学习防火墙知识。最终通过简单重启Docker服务解决了访问问题。
2025-09-22 00:40:23
192
原创 ubuntu防火墙开放端口
本文介绍了Linux系统中使用UFW防火墙的基本操作命令:1)启用防火墙sudo ufw enable;2)开放22号和8182端口sudo ufw allow 22、sudo ufw allow 8182/tcp;3)重载配置sudo ufw reload;4)查看状态sudo ufw status;5)检查80端口开放情况lsof -i:80。这些命令涵盖了防火墙的开启、端口配置和管理等基础操作。
2025-09-21 23:53:10
275
原创 maven下载历史版本
本文介绍了如何下载特定版本的Apache Maven。首先访问Maven官网,在"Other Releases"中找到"Maven3 archives",然后选择所需版本目录(如3.9.6),进入"binaries"子目录。最后根据系统选择下载格式:Linux/macOS用户下载.tar.gz文件,Windows用户下载.zip文件。
2025-09-21 20:21:36
543
原创 使用redisson实现延迟消息队列
Redisson实现延迟消息队列方案结合ZSET和BlockingQueue,通过RDelayedQueue存储延迟消息,RBlockingQueue处理到期消息。SpringBoot集成需配置RedissonClient并实现工具类,包含发送消息和消费者线程。生产环境建议增加重试机制、幂等控制和监控告警。相比Key过期事件和RocketMQ方案,Redisson支持分布式且内置重试,适用于订单超时等定时场景。完整实现参考官方文档和GitHub模板。
2025-09-19 16:07:47
78
原创 使用redisson实现延迟队列
Redisson延迟队列实现分布式延迟任务管理,通过ZSET存储任务(执行时间戳为score)和LIST实现目标队列。核心流程包括:1)任务存储到ZSET并排序;2)后台线程定期扫描到期任务并转移到阻塞队列;3)消费者通过take()阻塞获取任务。示例代码展示了从配置到生产消费的完整实现,支持秒级精度,依赖Redis持久化保证可靠性,适合订单超时等场景。需注意失败重试需业务层自行实现。
2025-09-19 15:44:34
192
原创 redisson延迟队列最佳实践
Redisson延迟队列最佳实践摘要:介绍了使用Redisson实现延迟任务的方法,包括初始化配置、添加任务、处理任务等核心步骤。强调了性能优化要点:批量处理、错误处理机制、监控和持久化配置。提供了高级特性应用示例,如死信队列处理失败任务。通过合理配置和资源管理,可构建高效可靠的延迟任务系统。
2025-09-19 15:13:23
162
原创 SpringBoot2.7X整合Swagger、Redission3.X的bug
摘要:在SpringBoot 2.7.0项目中整合Redisson和Swagger时,出现"Failed to start bean 'documentationPluginsBootstrapper'"错误。原因是redisson-spring-boot-starter 3.10.1自动引入的actuator与knife4j-openapi2 4.4.0冲突。解决方案是在引入redisson依赖时排除actuator模块,具体通过<exclusions>标签移除spring
2025-09-19 09:35:44
228
原创 java微信延迟支付 微信支付延迟付款
本文介绍了基于Redis实现的延时队列方案,用于解决支付回调不可达导致的订单状态不一致问题。方案采用Redisson实现,包含两个实现方式:定时任务和延时队列。重点讲解了延时队列的实现,包括核心实体类设计(DelayQueueJob、ScoredSortedItem)、常量定义、ZSet操作类(DelayBucket)、任务池管理(DelayQueueJobPool)以及队列监听初始化等关键组件。通过配置不同的延时时间(5秒/30秒/1分钟等),系统可自动查询支付状态,多次查询失败后自动关单。该方案相比定时
2025-09-17 10:21:15
66
原创 RabbitMQ、Kafka、RocketMQ以及Redis 实现消息队列介绍,优缺点对比
本文系统介绍了消息队列技术及其在Redis中的实现方式。首先阐述了消息队列的基本概念、核心特性(有序性、重复消息处理、可靠性)和典型应用场景(商品秒杀、系统解耦)。然后对比分析了三种主流消息中间件(RabbitMQ、Kafka、RocketMQ)的特点和适用场景。重点讲解了Redis实现消息队列的三种方法:基于List的FIFO队列(支持阻塞读取和消息备份)、发布订阅模式(支持频道和模式订阅)以及Stream类型(支持消息分组、确认机制和全局唯一ID)。最后指出Redis适合轻量级消息队列场景,而重量级场景
2025-09-17 09:58:09
144
原创 在java中写出流和写入流实例哪些可以不用关闭及常见使用场景
Java流资源关闭规范:标准输入输出流(System.in/out/err)和内存流(ByteArray)可不关闭,但文件/网络/缓冲/对象流必须关闭。推荐使用try-with-resources自动管理,或finally块手动关闭。最佳实践建议统一显式关闭所有流以确保资源释放,避免潜在问题。典型场景包括文件读写、多资源管理、数据库连接和网络操作等,通过实现AutoCloseable接口支持自动关闭机制。
2025-09-13 11:28:39
564
原创 SpringBoot大文件下载失败解决方案
SpringBoot大文件下载失败解决方案摘要 针对SpringBoot大文件下载失败问题,主要原因是内存溢出、超时设置和网络不稳定。解决方案包括:1)后端采用流式传输和分块传输技术,避免内存溢出;2)调整Nginx配置,优化缓冲区和超时参数;3)前端实现分片下载和断点续传功能;4)增加HTTP超时时间并优化网络层配置。综合运用这些措施可有效解决大文件下载问题,提升系统稳定性。
2025-09-13 10:56:36
202
原创 在springboot中使用mock做controller层单元测试,请求示例包括GET(带参数)、POST(带请求头)、下载文件、上传文件等
本文介绍了SpringBoot中使用MockMvc进行Controller层测试的完整示例,涵盖5种常见场景:GET带路径参数和查询参数测试、POST带请求头和JSON体测试、文件下载和上传测试。每个场景都提供了测试代码和对应的Controller方法实现,并说明了测试类的基础配置方法,包括MockMvc自动配置和服务层模拟。这些示例展示了如何验证HTTP状态码、响应头、JSON路径和文件内容,为开发人员提供了全面的Controller测试参考方案。
2025-09-13 09:57:05
121
原创 Java与Vue前后端Excel导入交互解决方案
摘要 针对Java后端Excel导入需返回不同响应类型(文件流或JSON),而Vue前端需统一处理的问题,提出完整解决方案: 后端实现: 成功时返回JSON响应(Content-Type: application/json) 有错误时返回Excel文件流(设置Content-Disposition和Excel MIME类型) 前端处理: 使用axios默认配置responseType: 'blob' 通过响应拦截器动态判断内容类型: JSON响应:将Blob转为JSON对象 文件流:处理下载逻辑 提供错误文
2025-09-10 17:21:15
71
原创 同一台nginx中配置多个前端项目的三种方式
本文介绍了在Nginx服务器上部署多个Vue3前端项目的三种方式:1)多个二级域名方式,每个二级域名对应一个项目,配置简单清晰;2)端口转发方式,通过非80端口监听再转发到80端口,配置复杂且需要启动多个server;3)同一server基于location配置方式,但可能出现静态资源404或MIME类型错误问题。作者重点分析了第三种方式的问题现象,包括静态资源加载失败和模块脚本类型错误,并提供了相关参考链接。其中第一种多二级域名方式最为推荐,配置简洁直观。
2025-09-06 15:23:04
811
原创 学习nginx location ~ .*.(js|css)?$语法规则
本文详细解析了Nginx中location指令的匹配规则,重点介绍了location~.*\.(js|css)?$这一正则匹配语法的应用。内容涵盖7种匹配模式(=、^~、~、~、!~、!~、/)的优先级顺序和实际应用场景,并提供了静态文件处理、动态请求转发等典型配置示例。文章还补充了Rewrite语法、防盗链配置、文件缓存设置等实用技巧,帮助开发者掌握Nginx性能优化的核心配置方法。通过合理运用这些规则,可以显著提升Web服务器的处理效率。
2025-09-06 09:43:12
923
原创 springboot中Controller、Interceptor、Filter的执行顺序
摘要:本文演示了在Spring Boot中创建两个过滤器(OneFilter、TwoFilter)和一个拦截器(interceptor)的过程。通过访问controller方法发现,过滤器执行会包含拦截器,且拦截器在过滤器的doFilter方法内执行。特别强调:整个请求过程中使用的response对象是同一个,需注意避免重复调用getWriter()方法,否则会报错"getWriter() has already been called for this response"。该问题在CS
2025-09-05 14:02:27
353
转载 getWriter() has already been called for this response 的解决办法
【摘要】在SpringBoot项目中,当多次调用response.getWriter()时会抛出"getWriter() has already been called for this response"异常。问题代码中同时使用了getWriter()和getOutputStream(),而HTTP响应输出流只能被调用一次。正确做法是统一使用OutputStream方式输出JSON数据:通过response.getOutputStream()获取流,将JSON字符串转为字节数组写入,最
2025-09-05 13:49:11
132
原创 生产环境中redis的SCAN命令如何替代KEYS命令?
本文介绍了使用SCAN命令替代KEYS的完整方案。SCAN通过游标分批迭代,避免KEYS命令遍历整个键空间导致的阻塞风险。文章详细说明了SCAN的基础语法、迭代流程和Java实现示例,强调必须关闭Cursor避免连接泄漏。针对生产环境,提供了COUNT参数调优、客户端去重、集群模式适配等优化建议,并列举了典型错误场景。SCAN通过分批次迭代和游标管理,可安全实现高性能键空间遍历。全文150字。
2025-09-03 16:44:34
83
原创 redis中查询key是否存在的命令
Redis提供多种方式检查key是否存在:1)EXISTS直接返回存在状态;2)TYPE通过返回none判断不存在;3)GET等命令返回nil/0间接判断。注意EXISTS支持多key检查,避免使用KEYS *而改用SCAN命令。
2025-09-03 16:42:01
142
原创 redis操作命令报错:(error) WRONGTYPE Operation against a key holding the wrong kind of value
Redis数据类型冲突解决方案 原因:Redis操作错误通常因键值类型不匹配,例如对字符串使用列表命令。 解决方法: 检查键类型:TYPE key 删除冲突键:DEL key 规范操作: 字符串用GET/SET,哈希用HGET/HSET 添加版本前缀避免冲突 示例: 错误:GET user_hash(实际为Hash) 正确:HGETALL user_hash 提示:操作前需确认数据类型,必要时先删除旧键。
2025-09-03 16:27:30
462
原创 redis中五大数据类型的操作命令
Redis五大数据类型核心命令解析:String适用于缓存和计数器;List支持双向操作,可用于消息队列;Set保证元素唯一性,适合标签系统;Sorted Set通过分数排序,实现排行榜功能;Hash适合存储对象数据。各数据类型命令设计针对不同场景需求,与Swagger2分组排序类似,需根据数据特性选择合适操作方式,如有序集合可满足自定义排序需求。
2025-09-03 16:20:18
46
转载 工作中常见的 6 种设计模式,以及其使用场景?
哈喽,大家好。平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中,我都使用过哪些设计模式。
2025-09-02 17:08:24
39
原创 springboot中@EnableAsync和@Async的使用
摘要:本文详细介绍了Spring框架中@Async异步执行注解的使用方法。主要内容包括:1.基础配置,需通过@EnableAsync启用支持,建议自定义线程池;2.方法级使用要求,必须是public方法,支持void或Future返回值;3.典型应用场景,如耗时任务、批量处理等;4.线程池配置方案,包含核心参数设置和异常处理;5.监控方案,通过Micrometer采集指标,结合Prometheus可视化展示。文章还提供了@Async与@Scheduled结合使用的示例,并强调了同类调用失效、事务边界等注意事
2025-09-02 11:50:50
138
原创 Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
本文详细介绍了MySQL二进制日志binlog的功能与数据恢复方法。binlog记录所有DDL和DML语句(除SELECT),是MySQL重要的事务安全型日志,主要用于主从复制和数据恢复。文章演示了如何开启binlog、查看日志内容、通过位置点或时间节点恢复数据等操作步骤。当数据库误删时,可先还原全量备份,再通过分析binlog日志确定误操作位置,使用mysqlbinlog工具恢复指定区间的数据。文中提供了多种恢复场景示例,包括完全恢复、部分恢复(按位置点或时间区间)等操作命令,帮助用户有效应对数据丢失问题
2025-08-23 17:47:57
97
原创 如何判断binlog是否开启?
MySQL可通过SHOW VARIABLES LIKE 'log_bin'查看binlog状态(ON为开启)。检查log_bin_basename路径或SHOW MASTER STATUS获取当前binlog文件。5.7及以下版本默认关闭,需在配置文件中添加log-bin=mysql-bin并重启服务。8.0+版本默认开启。
2025-08-21 11:36:33
138
原创 rabbitmq发送的延迟消息时间过长就立即消费了
RabbitMQ延迟消息被立即消费的常见原因:1)TTL超过49.7天(32位整数限制);2)插件配置错误,未正确定义x-delayed-message交换机;3)死信队列参数设置不当;4)消息属性冲突;5)ACK模式问题。重点检查延迟时间是否超过4294967295毫秒(约49.7天)这一最常见原因,以及确保正确配置x-delay参数和交换机类型。案例中设置1年延迟(超过49天限制)会导致消息立即消费。
2025-08-19 11:58:22
365
原创 “openfeign“调用接口上传文件报错:Failed to deleted temporary file used for part [file]
在使用FeignClient上传文件时,必须明确指定consumes = MediaType.MULTIPART_FORM_DATA_VALUE参数。错误写法中缺少该参数会导致文件上传失败,正确写法需要在@PostMapping注解中显式声明consumes类型为multipart/form-data。这是Feign处理文件上传请求的必要配置,确保正确识别和传输multipart格式数据。
2025-08-16 16:59:31
259
原创 “openfeign“ 报错Invalid bound statement (not found)
摘要: MyBatis报错"Invalid bound statement (not found)",表明找不到接口方法com.wut.config.UserSrvFeignClient.findUserByUserId对应的SQL映射。该错误发生在调用ContentService.findShareContent方法时,可能原因包括:XML映射文件缺失、方法名不匹配、未正确扫描Mapper接口或配置问题。需检查SQL映射文件与接口方法的对应关系及MyBatis配置。
2025-08-16 16:50:50
356
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅