自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DN金猿的博客

爱好编程的小沙弥

  • 博客(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

面试宝典之应对HR30问,满满的干货

面试宝典之应对HR30问,满满的干货

2022-02-11

java面试问题-spring框架相关.docx

java面试问题-spring框架相关.docx

2022-02-11

spring常见面试题.docx

应届生、程序员面试宝典

2022-02-11

java面试问题-java基础相关.docx

java面试问题-java基础相关.docx

2022-02-11

redis配置文件redis.conf

redis配置文件redis.conf

2024-05-30

java面试总结pdf版

应届生程序员、java基础的法宝

2022-02-11

空空如也

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

TA关注的人

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