- 博客(191)
- 收藏
- 关注
原创 Spring Boot日期格式化艺术:全局配置、@JsonFormat与实战陷阱的权威指南
无论是表单字段绑定还是json结构的数据交互,我们都在字段双重保障无论是全局日期转换还是字段上的关于日期格式转换包括时区设置都最好保持一致,至少字段级别一定保持一致。
2025-04-10 16:16:06
1148
原创 时间处理核心原理与Easy-ES实战避坑指南
由于我们项目中引入了es组件,针对es中存储了很多关于日期的问题,由于我们项目需要实现国际化所以肯定需要考虑时区问题,所以es中日期相关的字段都采用了时间戳,那如何优雅的将业务中不同类型的日期值在写入到es中转换成时间戳的问题进行了延伸,包括前期一篇博客也发布了关于时区问题的处理给出的代码是Java语言,涉及到一个类的字段定义和设置方法。具体来说,用户有一个result对象,调用了setClientTime方法,传入的参数是data.getClientTime()。
2025-03-31 17:43:28
966
原创 深入解析 MyBatis-Plus 批量操作:原理、实现与性能优化&MyBatis参数映射机制详解
本文探讨MyBatis-Plus在高并发场景下的批量数据库操作优化。重点分析批量更新和自定义批量插入的实现原理:批量更新通过动态拼接CASE WHEN语句实现单SQL多记录更新,减少网络请求;自定义批量插入突破MyBatis-Plus默认的逐条插入模式,通过SQL注入器和动态代理机制实现高效批量处理。文章提供了详细的XML配置示例、性能优化建议(如分批次提交、数据库参数配置)以及避坑指南,帮助开发者在处理大数据量时显著提升系统性能。
2025-03-26 20:08:16
1523
原创 Java实现HTTPS双向认证的终极指南:从原理到实战
在与某个外部系统进行API对接,比如银行支付网关或第三方服务,这些系统通常要求双向SSL认证来确保通信双方的身份;前端端交互的时候或者进行HTTPS协议传输的时候,其实已经帮我实现了,就不需要通过代码层进行解决了,但是目前就有这个需求,在于第三方系统接口交互的时候需要进行双向认证,那么在实战之前,大家肯定需要对进行个熟悉的认知。
2025-02-14 16:11:19
1356
原创 Spring Boot 线程池自定义拒绝策略:解决任务堆积与丢失问题
Overridelog.error("异常: {},线程: {}", ExceptionUtils.getStackTrace(e), t.getName());作用:防止线程因未捕获异常直接终止,提升系统稳定性。当然这个是处理线程池中子任务处理业务逻辑的时候发生业务异常的处理方式,除此之外还有其他的解决方案@Overridetry {if (!log.info("队列已满,阻塞等待...");log.info("任务已加入队列");log.error("拒绝策略异常", e);
2025-02-08 16:53:44
1159
原创 基于 Slf4j 和 AOP 的自动化方法执行时间日志记录方案
开始方法] → [AOP 拦截] → [开始计时] → [业务逻辑执行] → [结束计时] → [MDC 存储时间]↓[日志输出] ← [MDC 输出时间]通过结合 Slf4j + Logback 和 AOP,我们可以自动化地记录方法执行的时间,并将其通过 MDC 传递到日志系统中,而无需手动添加时间记录的代码。这种方式在生产环境中非常方便,可以让你实时了解应用的性能瓶颈,且对代码的侵入性非常低。
2024-12-27 20:43:59
1237
转载 【高性能缓存方案】SpringCache整合Redis+Caffeine两级缓存架构
本文按照对业务入侵的递减程度,依次介绍了三种管理两级缓存的方法。至于在项目中是否需要使用二级缓存,需要考虑自身业务情况,如果Redis这种远程缓存已经能够满足你的业务需求,那么就没有必要再使用本地缓存了。毕竟实际使用起来远没有那么简单,本文中只是介绍了最基础的使用,实际中的并发问题、事务的回滚问题都需要考虑,还需要思考什么数据适合放在一级缓存、什么数据适合放在二级缓存等等的其他问题。
2024-12-14 13:51:53
343
原创 跨时区国际化解决方案
UTC 格式:UTC 时间通常以 YYYY-MM-DDTHH:MM:SSZ 形式表示,T 用来分隔日期和时间,Z 用来标识 UTC 时间(零时区)。MySQL 中的 DATETIME 和 TIMESTAMP 类型:MySQL 使用 YYYY-MM-DD HH:MM:SS 格式存储时间,不使用 T 和 Z。DATETIME 存储原始时间,TIMESTAMP 存储 UTC 时间并在查询时根据时区转换。
2024-11-09 15:49:20
1153
原创 纯干货!详解Java并发之线程中断机制
Java并发之线程中断阻塞队列的工作原理BlockingQueue 是 Java 中提供的一种线程安全的队列实现,它在多线程环境下非常有用,尤其适合生产者-消费者模式。常见的 BlockingQueue 实现包括:BlockingQueue 提供了以下两类方法来插入和获取元素:线程中断与阻塞队列的结合在使用 BlockingQueue 时,通常会涉及到多线程的生产者-消费者模式。如果某个线程在 BlockingQueue 上调用了阻塞操作(如 take() 或 put()),而同时需要终止该线程,通常
2024-10-11 18:36:35
1198
原创 jmeter实现SSL双向验证
预先了解:SSL单向/双向认证详解握手请求以及tomcat配置https请求的请到以下网址了解der,cer文件一般是二进制格式的,只放证书,不含私钥crt文件可能是二进制的,也可能是文本格式的,应该以文本格式居多,功能同der/cerpem文件一般是文本格式的,可以放证书或者私钥,或者两者都有pem如果只含私钥的话,一般用.key扩展名,而且可以有密码保护pfx,
2024-10-10 17:00:42
836
原创 有没有遇到过Mybatisplus插件失效?
在 MyBatis 的分页插件设计中,通常会在 intercept 方法中对 SQL 语句进行修改,而不是直接调用 invocation.proceed()。这是因为分页插件的主要目的是修改 SQL 语句,使其包含分页逻辑(例如添加 LIMIT 和 OFFSET 子句),而不是简单地继续执行原生的 SQL 语句。拦截 SQL 语句:当 MyBatis 准备执行一个 SQL 语句时,分页插件会在 intercept 方法中拦截到这个 SQL 语句。
2024-09-25 14:05:29
1329
原创 Spring Boot项目中实现OAuth2客户端模式(Client Credentials Grant Type)
创建一个实现了ClientDetailsService接口的服务类,用于加载客户端详情。
2024-09-13 21:13:41
2128
原创 easy-es动态索引支持
很多项目目前都引入了es,由于es弥补了mysql存储及搜索查询的局限性,随着技术的不断迭代,原生的es客户端使用比较繁琐不直观,上手代价有点大,所以easy-es框架就面世了,学习成本很低,有空大家可以去了解下那说回主题,我们项目会发布在测试环境,也会部署在UAT环境,最后上线,但是ES可能就部署一套或者和别的业务进行公用,此时我们需要按照不同环境进行es数据隔离,由于代码肯定是一套的,那此时方案就需要通过nacos的动态配置进行索引自动更新新的索引名了。
2024-09-13 15:20:10
1400
1
原创 Maxwell 学习总结
目录下,如果当前尚未对库做任何修改,则 binlog 文件大小一定为 154 字节,每次重启 MySQL 都会生成新的 binlog 文件,mysql-bin.index 文件内记录了当前使用的 binlog 文件名称。此时在数据库中修改的数据,会被 Maxwell 监听到并发送到 Kafka Broker,Kafka 消费者会订阅到所有 Maxwell 发送的内容。可以看到,即便是一条 sql,Maxwell 也将会返回多条 json,每条 json 对应一条记录。,同时多条 json 的。
2024-09-03 17:17:12
652
转载 jasypt 敏感信息加密方案
使用Jasypt(Java Simplified Encryption)进行数据加密和解密主要涉及几个步骤,包括引入依赖、配置加密密码、加密敏感信息、将加密信息存储到配置文件中,以及应用程序启动时自动解密。
2024-09-03 17:13:45
511
原创 maven仓库密码加密方案原理
有一个要求就是说不能使用明文密码,需要对 settings.xml 文件中的password密码进行加密原始配置是没有对密码进行加密的。
2024-08-02 16:46:17
1222
1
原创 【三方对接】接口HTTP交互方案集合
我们很多项目难免会遇到和外围系统对接,尤其在车企行业尤其突出,比如对接PKI系统、TSP基础信息对接、VSP电子档案对接等,那就会涉及到接口调用方式,当然本篇的博文不是为了演示如何去交互,是为了收集哪些交互方式比较优雅,数据过来如何去规整,分发等策略,我们无论内网外网都是通过HTTP进行交互,包括认证等。
2024-07-30 19:41:30
427
转载 揭开浏览器验证HTTPS证书的合法性底层面纱
浏览器拿到了服务端的数字证书后,要怎么校验该数字证书是真实有效的呢?这个过程很多人没有关注到,我这里详细说下。
2024-06-15 14:28:49
517
原创 并发编程:ScheduledThreadPoolExecutor你真的了解吗?
创建一个配置类来定义你的ScheduledThreadPoolExecutor实例。@Bean// 设置线程池大小// 设置线程前缀// 取消任务时是否移除注意,虽然上述示例中使用了ThreadPoolTaskScheduler,它是Spring对定时任务线程池的封装,底层也是基于实现的,因此适合用于集成定时任务。
2024-05-25 15:28:16
947
转载 Spring Upload File 报错FileNotFoundException
我们在项目中肯定经常遇到文件流相关的问题,本篇博文就是记录下使用文件路径不当引发的错误。
2024-05-24 18:23:56
151
原创 链路追踪原理
随着业务需求的快速变化和技术的演进,当一个用户请求需要跨越多个线程时,形成了复杂的调用链路。当出现性能问题、错误或故障时,导致故障排查、性能优化和业务逻辑理解变得困难。本文主要论述链路追踪的原理。
2024-05-21 18:39:14
365
原创 线程池异常如何处理?
忽的一下,想到了线程池的比较重要的一个参数:ThreadFactory接口,这个接口的作用是按需创建新线程的,使用线程工厂消除了对Thread#Thread(Runnable) new Thread的强依赖,使应用程序能够使用特殊的Thread子类、优先级等。大白话就是让线程池中的线程使用我们自定义的线程,这个自定义可不是我们通过execute()或submit()传进来的自定义线程,而是Worker类中的thread变量,也就是实际运行的线程,我们看一下Worker类的构造方法。
2024-05-17 17:04:28
2642
原创 服务调用中的异常处理方案
在微服务架构中,A服务调用B服务,当B服务中抛出异常时,我们的意愿是能够获取到所有的异常信息,并且可以触发服务的熔断降级。但由于全局异常处理机制的存在,会帮我们处理B服务中抛出的异常,并把HTTP的状态码设置为200,那么此时对A服务来说,对B服务抛出的异常是无感知的,仍会继续业务代码的执行,并且不会触发服务的熔断降级,可能会导致微服务系统的雪崩。注意:这里要区分业务状态码和HTTP的相应状态码,业务状态码是无法触发降级的。现在有个服务A 和服务B部分代码服务A 的代码Feign客户端的代码服务B的代码
2024-05-13 16:04:50
1060
原创 如何优雅的实现接口限流?
首先限流,其实解决方案有很多,比如通过nginx配置,通过gateway网关进行限流,比如Spring Cloud GateWay整合熔断器实现限流但是以上都是全局的,如何灵活的针对某些接口进行不同级别的限流呢?
2024-05-09 20:32:30
515
原创 SpringBoot中多数据源灵活切换解决方案
本篇内容介绍了“SpringBoot中如何使用Dynamic Datasource配置多数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持无数据源启动,支持配置懒启动数据源(3.3.2+)。支持数据库敏感配置信息 加密 ENC()。支持每个数据库独立初始化表结构schema和数据库database。
2024-04-26 18:11:35
1358
3
原创 如何解决线程池引发的future性能问题?
这个自定义拒绝策略里面其实就打印个日志没有抛出异常,也就是说不管你处理什么逻辑,但是如果不抛出异常的话呢,那么这个任务其实是没有结束的@overrideSystem.out.println("线程池有任务被拒绝了,请关注");上面两个方法就是核心了,也就是说在刚开始把task任务包装成FutureTask任务的时候,也就是new FutureTask()初始化的状态值是0,所以调用get方法的时候状态值还是0,并没有把状态值改变成1,所以对于线程池而已这个任务并没有完成,就会一直阻塞,那如何处理呢?
2024-04-16 10:09:24
708
原创 SSE高可用方案
SSE(Server-Sent Events)是一种用于实现服务器主动向客户端推送数据的技术,也被称为“事件流”(Event Stream)。它基于 HTTP 协议,利用了其长连接特性,在客户端与服务器之间建立一条持久化连接,并通过这条连接实现服务器向客户端的实时数据推送。
2024-04-07 11:29:06
1532
翻译 Spring Retry重试机制
重试的使用场景比较多,比如调用远程服务时,或者feign远程调用的重试,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次。用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有。话不多说,先看演示。
2024-03-22 13:56:35
219
原创 Spring Cloud GateWay整合熔断器实现限流
其实网关是很强大,能做的事情很多,包含很多过滤器包括限流,具体的网关可以参考我的另外一篇博文。
2024-03-07 14:18:25
784
原创 《Token+Redis双核防御:高并发系统幂等设计的落地实践》
在车联网OTA升级场景中,接口防重放攻击是保障系统安全的核心需求。本文重点剖析Redis分布式方案在车辆接口调用频控中的实践,该方案通过RedisKey.API_ATTACK构建车辆唯一标识+签名特征的复合键,实现分钟级访问频次控制。
2024-03-06 16:08:02
529
转载 CompletableFuture在异常处理方面的一些常见问题和解决方案!
CompletableFuture是Java 8引入的一个类,位于java.util.concurrent包下。它提供了一种方便的方式来进行异步编程,尤其是在处理一系列并发任务时非常有用。CompletableFuture支持链式调用和组合多个异步任务。我们可以通过调用各种方法来注册回调函数,在任务完成时获取结果或处理异常CompletableFuture提供了强大的功能来处理异步编程中的结果和异常。然而,在处理异常时,我们需要注意一些常见的陷阱。
2024-02-26 17:55:44
1121
1
原创 玩转Java8新特性
*** 整车大版本策略-有效/无效处理逻辑* @param status 有效:1 无效:0**//*** 如果参数为有效:1 ---> 该目标大版本下所有原版本策略都是有效的,可以继续* 反之无效:0 ----> 该目标大版本下所有原版本策略都是无效的,需要将策略都设置失效状态 2、策略关联的任务都设置为失效状态* @param status 有效:1 无效:0**/// 通过目标大版本号且是有效状态的获取所有的关联任务id// 批量修改任务的状态置为已失效。
2024-02-07 13:59:40
434
原创 【Elasticsearch】从入门到精通
吕老师:但是 Lucene 还是一个库,必须要懂一点搜索引擎原理的人才能用的好,所以后来又有人基于 Lucene 进行封装,写出了 Elasticsearch吕老师:类型是用来定义数据结构的,你可以认为是 MySQL 中的一张表。文档就是最终的数据了,你可以认为一个文档就是一条记录吕老师:比如一首诗,有诗题、作者、朝代、字数、诗内容等字段,那么首先,我们可以建立一个名叫 Poems 的索引,然后创建一个名叫 Poem 的类型,类型是通过 Mapping 来定义每个字段的类型。
2024-02-04 14:31:58
1411
原创 mysql锁的实际场景分析
首先判断该where的条件列是否命中索引了,注意是命中哈,也就说即使加了索引但是实际上并未命中,都是导致全表扫描,给所有的数据加上了行锁+间隙锁,相当于表锁如果命中了索引,如果更新操作未提交事务,此时记录不存在那么就会产生间隙锁,存在就行锁,也可能两个锁同时存在,如果记录存在那一定是行锁如果命中了索引,如果插入操作未提交事务,一定是行锁,不会产生间隙锁,及时事务未提交也不会影响别的事务进行更新或者插入操作。
2023-12-27 17:41:01
785
原创 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏【权限控制】
我们在使用手机银行的时候经常能看到APP上会将银行卡的卡号中间部分给隐藏掉使用 ***** 来代替,在某些网站上查看一些业务密码时(例如签到密码等)也会使用 ***** 来隐藏掉真正的密码,那么这种方式是如何实现的呢?我们这篇文章的实现思路就基于Hutool来实现,在Hutool中提供了一个名为 DesensitizedUtil 的工具类,我们使用这个工具类来加密。
2023-12-26 11:06:22
1297
转载 还在无脑使用synchronized?volitale或许能更优雅的帮到你
volatile 修饰符适用于以下场景:某个属性被多个线程共享,其中有一个线程修改了此属性,其他线程可以立即得到修改后的值。比如boolean flag ,或者监视数据变化,实现轻量级同步单纯的赋值,比如将flag的值改为true或者false,不适用于count++这样的非原子操作监视数据变化,比如检测到flag的值变为true,就退出循环等操作,当温度超过40度就报警等。
2023-12-09 18:15:23
182
原创 【CompletableFuture】批量异步任务处理
当我们在项目中遇到很多业务同时处理,如果是串行肯定是影响性能的,这时候就需要异步执行了,说道异步肯定就有很多方案了。
2023-11-07 17:11:06
906
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人