- 博客(173)
- 资源 (3)
- 收藏
- 关注
原创 解决RedisTemplate的json反序列泛型丢失问题
Redis反序列化类型转换问题及解决方案 在使用RedisTemplate存储对象时,使用GenericJackson2JsonRedisSerializer可能引发反序列化时类型转换异常(LinkedHashMap无法转具体类型)。本文提出了三种解决方案: 类型注解方案:通过ObjectMapper激活类型注解,但会增加存储空间、降低可读性; 二次转换方案:先获取Object再转换,简单但影响性能; 动态类型方案:利用ScopeValue传递类型信息,需要改造序列化器但性能较好。 推荐根据性能需求选择方案
2025-05-21 17:25:27
443
原创 记knife4j的Controller接口不能排序的问题
在使用knife4j构建接口文档时有时需要Controller接口级别的排序. 在使用过程中发现接口不能排序.排查发现如下问题,相关框架是springboot3 + sprind doc。
2025-04-05 11:54:57
206
1
原创 koupleless 合并多个微服务应用到一个应用实例(包含springcloud gateway)
Koupleless 是一种模块化的 Serverless 技术解决方案。基础原理是拆分成了基座+模块的概念。spring cloud gateway是webflux 和tomcat 部署到一起需要修改一些东西,基座需要引入。
2025-03-17 11:23:11
529
原创 K8s环境下使用sidecar模式对EMQX的exhook.proto 进行流量代理
对于在k8s的集群的来说也是支持的,因为每个pod都有一个sidecar对于sidecar 也可以动态升级,不影响主容器因每个pod都有一个sidecar,所有挂掉一台不会影响emqx集群github。
2024-10-12 11:38:36
620
1
原创 spring boot jar 分离自动部署脚本
远程部署时spring boot 包,比较大。可以采用依赖库和业务包分离的方式。提供一个脚本进行自动部署。
2024-09-30 10:41:05
614
原创 使用javassist对类做字节码增强
在日常开发中我们依赖的三方库里的类是无法改动的. 但可以使用javassist 在启动时对类的字节码做改动.达到修改类的作用。利用javassist 可以将方法的入参和返回值打印出来.在启动之前对类的字节码做修改。
2024-05-09 16:16:13
275
原创 在spring中使用bytebuddy 对bean做Aop拦截
拦截spring 中的某个bean拦截其方法的调用。在其前后做一些类似于aop的操作。
2024-05-06 16:10:00
832
1
原创 spring boot 中动态注册mybatis mapper
mapper不仅要注册到mybatis中还需要注册到spring 里。这样可以将某些业务单独封装成业务组件,项目中开箱即用。
2023-12-14 16:13:42
517
原创 Spring Boot 事务管理与myabtis的事务执行过程分析
多数据源下要保证SqlSessionFactory和DataSourceTransactionManager的数据源用的同一个。如果在原来的事务下再开线程做业务操作,则事务和主线程事务是不同的(连接不同)
2023-09-13 09:59:58
549
原创 HBase 遇到的问题以及处理
每次合并后,如合并 A 和 C,HBase 将开始对 RegionD 进行压缩。这种场景下,和以上的处理方式相同,需要注意的是这Region进行Compact的时候不能合并成功,在hbase shell 进行合并后,可以观察HMaster的日志,如果最终可以合并成功,则不会出现error日志信息,如果遇到始终不能合并的Region,可以先尝试将此Region下线掉(unassign region),再次上线(assign region),再执行merge操作。可以看到属于该表的每个区域的开始键/结束键。
2023-06-21 11:33:01
2171
原创 spring boot 使用gradle 构建不包含依赖的jar包,独立制定jar路径
【代码】spring boot 使用gradle 构建不包含依赖的jar包,独立制定jar路径。
2023-06-07 17:51:02
1184
原创 SpringCloudStream配置Rabbitmq的延迟队列配置
使用springCloudStream实现Rabbitmq的延迟队列主要在配置如何配置。Rabbitmq需要安装延迟队列插件安装延迟插件。
2023-05-11 09:25:43
441
原创 轻量级Master-Worker 模型实现多线程的ETL
背景在业务开发中.通常我们会遇到将数据库中的某些数据转换成另一种数据.即 ETL, 一般我们会把这个ETL过程改成多线程的. 已提高处理速度. 本文总结一种方法进行多线程ETL的方法.抽象使用生产者和消费者模型(类似内存消息队列)+多线程模式抽象,生产者: Producer抽取数据的抽象, 即数据产生端.容器: Container暂存生产者锁产生的数据. 等待消费者来拉取数据消费者: Consumer负责拉取容器的数据. 然后由Master分派给具体的Worker来执行管理者 Mast
2022-05-26 23:21:10
267
原创 postgresql jdbc getGeneratedKeys 方法返回主键
最近在做java agent 将xxl-job 迁移到postgresql时发现在 pg 的jdbc 驱动中 getGeneratedKeys 的方法和mysql中返回主键的实现有所区别pg的主键是bigserial mysql主键autoincrment例如: pg与 mybatis中 如果没有keyColumn="id" 这一行, 是不能返回id的. 但是mysql是可以的查看mybatis源码得知org.apache.ibatis.executor.statement.PreparedStat
2022-05-06 11:11:44
1470
1
原创 macOS 下编译TDengine
切换到一个最新的tag上git clone https://github.com/taosdata/TDengine.gitgit checkout ver-2.4.0.10git checkout -b ver-2.4.0.10 ver-2.4.0.10git submodule update --init --recursivemkdir debug && cd debugcmake .. && cmake --build .需要安装cmake等..
2022-04-06 14:00:51
5396
原创 spring-kafka 自定义序列化方式
配置类 @Bean KafkaDefaultKafkaProducerFactoryCustomizer kafkaDefaultKafkaProducerFactoryCustomizer() { return new KafkaDefaultKafkaProducerFactoryCustomizer(objectMapper()); } @Bean KafkaDefaultKafkaConsumerFactoryCustomizer de
2022-01-14 10:49:44
673
原创 自定义swagger的basepath
自定义basePathnew Docket(DocumentationType.SWAGGER_2).pathProvider(new IPathProvider(pathProperties))自定义PathProviderpublic class IPathProvider implements PathProvider { private PathProperties pathProperties; public IPathProvider(PathPr
2021-12-19 15:14:26
3309
原创 修改Swagger2ControllerWebMvc 的返回值.
swagger Swagger2ControllerWebMvc 返回值修改有些场景下相对swagger-doc 返回的文档信息做些增强等. 但pringfox.documentation.swagger.v2.path 无法自定义controller , 所以可以使用切面方式拦截下最后序列化的地方.序列化@Aspect@Component@AllArgsConstructorpublic class SwaggerAspect { private final ServerPrope
2021-11-30 15:36:14
997
原创 Istio 集成 Nacos 作为注册中心
springboot + nacos + istioserver 配置nacos.discovery.server-addr=192.168.27.173:8848server.port=10016spring.application.name=mesh-servernacos.discovery.auto-register=truenacos.discovery.register.group-name=group1nacos.discovery.register.healthy=true
2021-09-22 15:38:17
6207
8
原创 K8s 安装使用 apisix
apisixApache APISIX是一个动态的、实时的、高性能的 API 网关. 本文主要测试在k8s环境下使用apisix-ingress-controlle使用Helm Chart安装所有的pod,svc等都放到了default的namespace下apisix$ helm repo add apisix https://charts.apiseven.com$ helm repo update$ helm install apisix apisix/apisixapisix-da
2021-08-23 21:18:37
7860
原创 SpringCloud 微服务客户端服务列表缓存优化. nacos2.0.2 与 spring-cloud-loadbalancer
获取所有服务列表com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient#getServices发一个grpc请求获取服务列表根据serviceId获取服务列表com.alibaba.nacos.client.naming.NacosNamingService#selectInstances()com.alibaba.nacos.client.naming.cache.ServiceInfoHolder#getServiceInfocom
2021-08-10 15:29:20
2093
3
原创 K8s 作为 SpringCloud 微服务的开发环境
云原生下本地开发最近把公司微服务开发环境都迁移到k8s中. 之前部署在一台实体机上面. 记录下踩到的坑技术栈Nacos 2.0.2SpringCloud 2020.01问题nacos 2.0.2 使用grpc 需要暴露更多端口. 且需要tcp代理. ingress 解决不了问题.本地服务调用与开发环境通用服务之间服务调用的网络隔离问题.nacos 问题.使用 kubefwd 解决服务注册地址直接写 k8s 部署nacos的 service name, 再使用kubefwd将ser
2021-08-02 16:56:51
699
原创 rabbitmq-cli-consumer 命令行消费功能
rabbtimq-cli-consumer使用kafka是可以使用kafka的cli来消费topic的数据. 在rabbtimq中官方是不支持的. 可以使用 命令行消费来解决 download使用方式executable使用此参数指定一个可执行的文件. 例如php. 可以将消费到的数据写到一个文件中#!/usr/bin/env php<?php// This contains first argument$message = $argv[1];// Decode to get o
2021-06-20 18:13:59
669
2
原创 多租户场景中seata的TCC模式优化
seata与多租户多租户模式为一个租户一个DataSource 隔离性比较好. 同时对业务拆分了微服务后就带来了分布式事务问题. 可以使用seata来解决这类问题.测试过程中对AT模式没有什么问题. 但是在TCC模式下commit/cache会丢失数据源的信息所以要在执行之前要切换当前租户.TCC模式下多数据源问题分析....
2021-05-18 22:30:38
599
2
原创 golang连接开启kerberos的phoenix query server服务端
phoenix query server其他语言可以连接phoenix 可以通过 phoenix query server 连接calcite-avatica-go新建项目Phoenix-Golang项目go.modmodule Phoenix-Golanggo 1.15require github.com/apache/calcite-avatica-go/v5 v5.0.0 // indirectexamplepackage mainimport ( "database
2021-05-18 22:14:21
1204
1
原创 swagger 生产环境关闭的另一个方案
方案一使用开关.通过swagger的Docke的的api来关闭. 但是还是会将swagger的jar包打到生产的jar中.其入侵性依然存在.方案二将swagger配置抽取成一个springboot starter打包时根据参数控制是否将此starter在运行时打到生产的jar中.maven 的profile可以直接控制. 在gradle中我们可以这样做plugins { id 'org.springframework.boot'}def profile = System.get
2021-04-08 17:08:00
792
原创 优化SpringCloud本地开发方式
SpringCloud本地开发本地启动多个服务新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入本地启动多个服务你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器,
2021-03-13 09:49:19
784
原创 Spring聚合多个服务的接口数据
背景有时我们在项目中需要聚合多个接口成一个接口给前端提供数据. 使用并行会提升性能. 在spring 中提供的@Async 可以异步执行.编码 CompletableFuture<AppMachineInfoV3Dto> todaySummaryCount = machineTodaySummaryAggregatorService .getMachineTodayInfo(licenseId); CompletableFuture<LG
2020-12-16 13:09:41
860
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人