蔡定努
人前拼实力,人后拼努力
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
sentinel使用之限流-熔断
本文详细介绍了Spring Boot项目整合Sentinel的配置步骤。首先明确环境要求:JDK 8/11、Spring Boot 2.3.x~2.7.x、Spring Cloud Alibaba 2.2.10.RELEASE。接着指导下载并启动Sentinel控制台,包括自定义端口和账号密码设置。重点展示了完整的POM文件配置,包含Spring Boot Web、Sentinel核心依赖、Lombok等必要组件,并通过dependencyManagement统一管理版本。最后提供了项目构建和打包的相关插件原创 2025-12-11 15:48:31 · 150 阅读 · 0 评论 -
SpringCloud 整合 Zipkin链路追踪
本文介绍了分布式链路追踪工具Zipkin的安装与使用。Zipkin是Twitter开源的分布式跟踪系统,用于收集和展示微服务调用链数据。文章首先概述了Zipkin的作用,然后详细讲解了通过Docker安装Zipkin的方法,包括直接运行镜像和使用docker-compose部署。特别提供了支持MySQL持久化存储的配置方案,并附上了Zipkin所需的MySQL数据库表结构脚本。最后提到SpringCloud整合Zipkin的方法,实现分布式系统的链路追踪功能。全文涵盖了从安装部署到数据持久化的完整流程。原创 2025-10-24 11:01:11 · 63 阅读 · 0 评论 -
深入理解 Spring 事务同步器:为什么嵌套的 afterCommit 不执行?
本文通过一个实际案例分析了Spring事务同步器的执行机制,解释了为什么嵌套注册的afterCommit回调不执行。关键点在于事务同步器必须在事务活跃期内注册才有效,而案例中的嵌套注册发生在外部事务已提交阶段。文章提供了修正方案,强调同步器应在事务方法内直接注册,避免在回调中嵌套注册。最佳实践包括:确保注册时机在事务活跃期、遵循单一职责原则、根据业务场景合理设计事务边界。理解这些原理可避免类似问题,编写更可靠的事务相关代码。原创 2025-08-07 23:18:21 · 246 阅读 · 0 评论 -
基于 ShardingSphere 的 Spring Boot 数据加密与模糊查询实现
本文介绍了基于ShardingSphere和Spring Boot实现数据加密与模糊查询的完整解决方案。项目采用AES加密敏感数据,通过ShardingSphere的CHAR_DIGEST_LIKE加密器支持加密字段的模糊查询功能。配置包括数据源设置、加密规则定义(AES、MD5和模糊查询专用加密器)以及特殊设计的数据库表结构(添加salary_like字段)。该方案既保障了数据安全,又解决了加密数据难以进行模糊匹配的难题,适用于需要同时满足数据保护和复杂查询需求的场景。原创 2025-08-06 14:25:48 · 346 阅读 · 0 评论 -
Spring Boot 集成 ShardingSphere 实现读写分离实践
本文介绍了Spring Boot集成ShardingSphere实现数据库读写分离的实践方案。选用Spring Boot 2.7.9、ShardingSphere 5.1.1和MySQL 8.0.32等技术栈,通过配置主库(one)和两个从库(two、three)实现读写分离。文章详细说明了Maven依赖配置、数据库准备和表结构创建,其中关键依赖包括shardingsphere-jdbc-core和mybatis-plus-boot-starter。实现方案通过在三个数据库中创建相同的menu表结构,为后续原创 2025-08-05 11:51:17 · 286 阅读 · 0 评论 -
Spring Boot中使用@JsonAnyGetter和@JsonAnySetter处理动态JSON属性
摘要: 本文介绍了在Spring Boot中使用Jackson的@JsonAnyGetter和@JsonAnySetter注解处理动态JSON属性的方法。通过定义DynamicProperties类存储固定字段和动态属性,配合Spring Boot控制器接收和返回JSON数据,实现了灵活处理不固定数据结构的需求。特别说明该方案仅适用于@RequestBody场景,因为Jackson的反序列化机制是触发注解生效的关键。这种方法增强了系统对动态JSON属性的处理能力,适用于前端数据结构多变或需求频繁变更的业务场原创 2025-05-30 10:50:58 · 561 阅读 · 2 评论 -
Java中使用自定义序列化器:自动添加自定义字段返回前端实现与应用
本文介绍了如何在 Java 中实现一个自定义的 BigDecimal 序列化器,以在序列化过程中自动添加格式化后的视图字段。通过使用 JsonSerializer 和 DecimalFormat,我们可以在输出 JSON 数据时,既保留原始的 BigDecimal 数值,又添加一个格式化后的字符串字段,便于前端展示。文章详细展示了如何定义 BigDecimalViewSerializer 序列化器,并将其应用于实体类中的 BigDecimal 字段。此外,还提供了测试示例,展示了序列化后的 JSON 输出效原创 2025-05-13 16:46:32 · 248 阅读 · 0 评论 -
Java中使用自定义序列化器:自动添加动态字段的实现与应用
在Java开发中,处理BigDecimal类型数据时,常常需要在序列化过程中添加格式化后的视图字段,以满足前端展示需求。本文通过实现一个自定义的BigDecimalViewSerializer序列化器,展示了如何在序列化时自动添加view字段。该序列化器继承自JsonSerializer<BigDecimal>,重写serialize方法,在输出原始数值的同时,生成格式化后的视图字段。通过@JsonSerialize注解,可以将该序列化器应用于实体类中的BigDecimal字段。最终,返回的JS原创 2025-05-13 10:36:37 · 275 阅读 · 0 评论 -
Spring Boot 依赖配置分离多种打包方式
springboot中依赖分离打包方式原创 2025-01-03 18:27:25 · 921 阅读 · 0 评论 -
Jar 包加密混淆工具 ClassFinal
ClassFinal 是一款 java class 文件安全加密工具,支持直接加密 jar 包或 war 包,无需修改任何项目代码,兼容 spring-framework;可避免源码泄漏或字节码被反编译。加密后,原始的 class 文件中方法体被清空,当 class 被 classloader 加载时,真正的方法体会被解密注入。为兼容 spring,swagger 等扫描注解的框架,故而保留了方法参数、注解等信息;反编译者只能看到方法名和注解;原创 2024-10-07 15:36:38 · 779 阅读 · 0 评论 -
多线程事务管理:Spring Boot 实现全局事务回滚
在本文中,我们通过 TransactionTemplate 和多线程执行器实现了多线程中的全局事务控制,确保所有线程的数据库操作要么一起提交,要么在发生错误时一起回滚。在 Spring Boot 中,我们通常会在需要事务控制的服务方法上使用 @Transactional 注解来保证事务的一致性。在这些用户的处理过程中,数据库操作必须要么全部提交,要么在发生错误时全部回滚。因此,我们需要一种方式,能够在多线程环境下将所有线程的数据库操作放在同一个事务上下文中,并由主线程统一提交或回滚事务。原创 2024-09-24 23:12:08 · 1515 阅读 · 0 评论 -
使用 Prometheus + grafana监控 Spring Boot 应用
前面我们在 Spring Boot 项目中集成 Actuator 和 Micrometer 实现了 Spring Boot 应用监控,基本上覆盖 JVM 各个层间的参数指标,并且配合 Grafana Dashboard 模板基本可以满足我们日常对 Spring Boot 应用的监控。但是,对于核心业务是否也能够监控它们的执行情况呢?答案是肯定的,Micrometer 支持自定义监控指标,实现业务方面的数据监控。例如统计访问某一个 API 接口的请求数,统计实时在线人数、统计实时接口响应时间等。原创 2024-07-31 11:02:49 · 370 阅读 · 0 评论 -
CPU 占用率 100% 排查五步法
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。对于线上问题定位来说,分秒必争,所以我们在编码过程中,除了要实现业务功能交付,还要追求代码质量,要写出更高效、更优雅的代码。当然,除了使用上面的基础方法外,还有很多工具可以直接使用,例如阿里的 Arthas。的占用 CPU 是最高的,直接是 100%。原创 2024-07-29 22:29:14 · 853 阅读 · 0 评论 -
docker+[nginx] 部署nacos2.x 集群
便于直接使用容器名连接mysql,如果不创建,连接mysql直接使用ip。nginx 【可选,见文末】原创 2024-06-27 17:22:30 · 445 阅读 · 0 评论 -
日常开发踩坑
【代码】日常开发坑记录。原创 2024-06-03 15:00:33 · 202 阅读 · 0 评论 -
Springboot中使用spel+自定义注解实现权限控制
*** @author 蔡定努/*** permissionAll()-----只要配置了角色就可以访问* hasPermission("MENU.QUERY")-----有MENU.QUERY操作权限的角色可以访问* permitAll()-----放行所有请求* denyAll()-----只有超级管理员角色才可访问* hasAuth()-----只有登录后才可访问* hasTimeAuth(1,10)-----只有在1-10点间访问。原创 2024-06-02 01:00:50 · 680 阅读 · 0 评论 -
Spel表达式使用案例
【代码】Spel表达式使用案例。原创 2024-06-02 00:26:35 · 280 阅读 · 0 评论 -
使用Lua基本实现分布式锁并自动续期
分布式锁的成熟方案很多,比如redission、zookeeper……原创 2024-05-31 11:30:12 · 683 阅读 · 0 评论 -
nacos 2.0 启动出现NacosException: Client not connected, current status:STARTING异常
详情阅读nacos官网Nacos 2.0.0 兼容性文档:https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-compatibility.html。Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。原因:1.x版本采用的是http方式,2.x 默认采用的是 grpc方式。docker 启动也需要暴露对应端口。原创 2024-03-26 14:44:47 · 4973 阅读 · 0 评论 -
Spring Cloud Gateway 过滤器种类
Spring Cloud Gateway 过滤器原创 2023-03-09 12:03:53 · 950 阅读 · 0 评论 -
Spring Cloud Gateway 自定义全局过滤器、局部过滤器器
Spring Cloud Gateway 自定义全局过滤器、局部过滤器原创 2022-11-25 17:30:24 · 2155 阅读 · 1 评论 -
springClouAlibaba 2021.0.1.0 不识别bootstrap.yml配置中心配置的问题
springClouAlibaba 2021.0.1.0 不识别bootstrap.yml配置中心配置的问题最新版本(2021.0.1.0)移除了 spring-cloud-starter-bootstrap 的支持,改用 spring.config.importspring boot >= 2.4.0 默认不会启动 bootstrap 容器,官方文档说明解决办法依然使用 bootstrap.yml方法一: 环境变量开启即可spring.cloud.config.discov原创 2022-05-01 00:13:29 · 1104 阅读 · 0 评论 -
SpringCloud 实现分布式锁
01 为什么用分布式锁在讨论这个问题之前,我们先来看一个业务场景:系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。由于系统有一定的并发,所以会预先将商品的库存保存在 redis 中,用户下单的时候会更新 redis 的库存。此时系统架构如下:但是这样一来会产生一个问题:假如某个时刻,redis 里面的某个商品库存为 1,此时两个请求同时到来,其中一个请求执行到上图的第 3 步,更新数据库的库存为 0,原创 2021-10-17 23:46:14 · 1862 阅读 · 1 评论 -
SpringCloudAlibaba完整demo
本demo集成SpringCloudAlibaba中注册中心、配置中心、链路追踪、分布式事务、Feign远程调用、网关链接:https://download.youkuaiyun.com/download/caidingnu/26991183原创 2021-10-02 22:19:42 · 1679 阅读 · 2 评论 -
SpringCloud Alibaba Nacos -------- 集群部署(四)
nacos 版本为1.4(默认启动是集群模式cluster),也可以在启动时候加上命令 -mcluster一、准备三个nacos127.0.0.1:8848127.0.0.1:8849127.0.0.1:8850二 、在config/application.properties中各自修改端口,避免端口冲突server.port=8848有必要的话,初始化数据库三、配置节点cluster.conf.example 重命名为cluster.conf或者复制一份重命...原创 2020-12-14 23:36:36 · 318 阅读 · 0 评论
分享