自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 OpenFeign不支持{}特殊字符的header解决

Feign的Header特殊字符{}处理

2022-11-13 00:15:52 999 1

原创 shenyu2.5.0解决Exceeded limit on max bytes to buffer:262144

shenyu

2022-10-19 19:19:59 1096

原创 shenyu2.5.0对restful的path中文不支持,400错误解决

shenyu不支持中文编码

2022-10-17 22:01:52 366

原创 shenyu2.5.0 报错 Expected a com.google.gson.JsonObject but was com.google.gson.JsonPrimitive; at path

shenyu网关

2022-10-12 23:53:47 1247

原创 flyway 报错 Unable to resolve location classpath:db/migration

flyway

2022-10-12 23:52:58 466 1

原创 如何定位解决问题

线上问题定位

2022-08-21 23:06:21 85

原创 从0到1架构项目

项目架构

2022-08-06 12:24:11 118

原创 Mybatis Plus自定义分页(自动开闭分页)

mybatis plus分页

2022-07-27 22:27:21 4456

原创 Lambda调试方式

lambda调试

2022-07-27 22:26:21 881

原创 Lambda重构设计模式

Lambda设计模式

2022-07-27 22:24:27 170

原创 数据库多读实例数据一致性问题

多数据实例一致性

2022-07-27 22:23:42 161

原创 Java提升反射效率

反射优化

2022-07-27 22:22:44 554

原创 批量查询优化思路

批量查询

2022-07-27 22:21:35 190

原创 通用解决数据库批量插入和批量更新死锁问题

批量插入和批量更新死锁

2022-07-27 22:20:20 2079

原创 扩展mybatis plus支持for update

mybatis plus通用for update

2022-07-27 22:18:41 6061

原创 SpringBoot和MyBatisPlus中枚举自动转换

一、请求参数自动转换@Getterpublic enum UserType{ BACKEND(1, "后台"), FRONT(2, "前台"), ; @JsonCreator UserType(Integer val, String desc) { this.val = val; this.desc = desc; } @EnumValue private final Integer val;

2021-05-12 23:07:22 1793

原创 @Builder和@Accessors那个更香

一、对象的创建方法new Object()工厂模式建造者模式二、优劣性2.1 直接创建对象构造方法多个参数时无法明确含义,比如Object(String name, String phone)和Object(String name, String addr)当参数大于4个时,需要组合所有参数的构造方法,造成代码太大2.2 使用工厂模式可以通过定义方法newInstance和getInstance来确定单例还是多例,再则可以通过方法名来区别方法参数2.3 建造者模式支持链式表达

2021-05-12 23:06:00 272

原创 ThreadLocal、MDC线程池传递和自动清理

一、背景比如TraceId、UserContext、RequestContext需要在线程池进行传递和清理二、实现统一的ThreadLocal垃圾回收public class ThreadLocalCleaner { private static final List<ThreadLocal<?>> CONTAINER = Lists.newArrayList(); public static void register(ThreadLocal<

2021-05-12 23:05:19 3316

原创 解决Unable to find a single main class from the following candidates [xxx,xxx]

一、问题描述1.1 开发环境配置pom.xml<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--一定要对上springboot版本号,因为新版springboot不再设置这个插件的依赖--> <version>${spring-boot.vers

2021-05-12 23:04:11 861

原创 springboot敏感数据脱敏

一、背景像身份证、手机号、住址等敏感信息在日志打印、前端用户展示时需要对数据脱敏处理。二、实现方案在数据库查询阶段处理可以在mybatis拦截器中对结果映射时进行脱敏处理数据序列化阶段处理基于Jackson序列化器对数据动态处理三、实现代码以下是基于Jackson的脱敏方案常用的脱敏类型枚举@Getter@AllArgsConstructorpublic enum MaskType { PHONE(3, 4), //... NONE(0, 0),

2021-05-12 23:03:52 2790

原创 扩展MybatisPlus批量插入(忽略唯一索引冲突行)

一、背景再数据同步或者幂等场景下,常常需要设置唯一索引来避免重复请求,select and update效率低,且并发时还是会报错,并不友好,那么可以用Mysql的Insert ignore语法来优化。MybatisPlus官方并没有针此处场景进行支持二、环境<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifac

2021-05-12 23:03:21 3713

原创 解决MyBatis Plus不支持多个MetaObjectHandler实现类

一、背景MybatisPlus不支持注入多个MetaObjectHandler实例二、原因查看MybatisPlusAutoConfiguration类@Bean@ConditionalOnMissingBean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { ... // TODO 此处必为非 NULL GlobalConfig globalConf

2021-05-11 23:00:51 2539

原创 解决Mybatis Plus使用insertBatchSomeColumn批量插入Null字段非空问题[终版]

一、场景Mybatis Plus默认提供了insertBatchSomeColumn选装件当批量插入的PO对象是NULL值,且数据库字段是NotNull且有默认值时就会报Value Not Null异常二、解决思路在代码生成器时对PO对象赋予默认值在BaseServiceImpl实现类中对PO对象值为Null,数据库字段NotNull且有默认的值字段自动设置默认值三、实现3.1 代码生成器解决方法重写AutoGenerator/*package com.taco.sprin

2021-05-11 23:00:16 8504

原创 解决数据库批量插入和批量更新死锁问题

一、背景因为上游系统不可控性,下游系统的唯一约束不可知,数据推送的过程中可能数据乱序的如果存在并发上传,没有加锁,非常大的可能性出现死锁二、解决思路手动对数据进行排序接口对相同来源请求进行加锁、队列在代码生成的过程标记唯一索引字段,统一抽象服务层插入和更新方法,对数据排序和拆分单次插入量三、实现基于统一抽象服务层解决思路查询唯一索引字段MYSQL:INNODB_SYS_INDEXES中记录表的索引INNODB_SYS_FIELDS记录索引的字段和顺序自定义唯一索引

2021-05-11 22:59:42 1730

原创 批量查询优化思路

一、背景跨库查询连表查询,小表大部分都重复数据仅查询无事务隔离性要求IN数量过大全表扫描二、思路将主表先查询出来,再异步查询子表数据IN批量查询可以使用forkJoin思路,将大批量查询分解成多个子查询,再聚合返回结果查询时可能存在连续字段是索引,可以对数据先排序在查询基于Reactor思路,可以将数据返回流的,先返回先处理...

2021-05-11 22:59:09 212

原创 提升反射效率

一、背景在框架层、业务通用处理层经常会使用反射来做一些统一的处理,但是反射往往效率很低二、解决方法2.1 缓存可以用ConcurrentMap懒缓存Class、Field、Method等元数据,减少ClassLoader的寻找时间可以参考spring的ReflectionUtils工具 /** * Cache for {@link Class#getDeclaredMethods()} plus equivalent default methods * from Java 8 based

2021-05-11 22:58:17 191

原创 REST API版本控制的三种方式

一、背景在多版本同时运行的场景下(APP),会存在不同版本的接口,同时新版本也需要向下兼容,那么就需要客户端传递版本号信息二、Version版本传递的方式2.1 版本信息放在Path或RequestParam中api.example.com/v3api_v3.example.comapi.example.com/xxx?version=v3优点:版本号清晰缺点:版本号侵入了url中,业务无关的参数应该放在请求头中2.2 在请求头中传递Accept-version:v1Accept-v

2021-05-11 22:57:44 423

原创 多读实例数据一致性问题

一、背景大部分业务都是读多写少场景,通过读写分离增加读节点来增加负载二、数据库同步方式在从节点同步主节点时,可以设置同步方式异步复制(Asynchronous replication)MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。全同步复制(Fully synchronous r

2021-05-11 22:56:50 220

原创 XXL-JOB接入trace链路

一、背景目前XXL-JOB使用自定义XxlJobHelper来做日志埋点,但是实际上很多内部框架的日志都未接入,此时定时任务出现错误,需要上执行器上查看日志信息,这时候无法查询到本次调度相关日志。二、环境<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version>

2021-05-11 22:55:34 1716

原创 Mybatis Plus自定义分页(自动开闭分页)

一、 背景Mybatis Plus对于分页数量大小默认有限制,同时有的时候分页接口和导出接口通常是一模一样,这时候需要自动判断是否需要开启分页。二、实现思路基于mybatis plus的文档// 当`page`参数为null时,会抛出空指针异常<E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);如果想实现自动开闭分页需要这样实

2021-05-11 22:54:53 1153

原创 Sentinel Dashboard支持Nacos和注解启动改造

一、背景sentinel官方并没有对nacos持久化进行完整适配改造代码还需要对代码重新打包,对于代码的将来升级的合并都不太方便一般情况只需要在网关层做限流二、环境 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifac

2021-05-11 22:54:08 530 1

原创 解决Mybatis Generator 将tinyint映射为Byte和Boolean

Mybatis Generator 对于Tinyint映射为Byte和Boolean1. 对于tinyint(4)映射为Byte1.1 环境spring boot 2.1.xmybatistk.mybatismysql1.2 自定义类型解析器(1) 新建以下类public class CustomerJavaTypeResolver extends JavaTypeResolverDefaultImpl { public CustomerJavaTypeResolver()

2021-05-10 19:50:25 3162

原创 docker安装jenkins

#使用docker安装jenkins一 、拉取jenkins镜像镜像地址docker镜像配置文档#拉取镜像docker pull jenkins/jenkins二 、运行容器2.1 docker安装docker run -d -p 18081:8080 -p 50000:50000 #数据文件挂载-v /usr/local/use_data/jenkins/data:/var/jenkins_home #时间同步-v /etc/localtime:/etc/localtime -

2021-05-10 00:20:32 178

原创 恢复虚拟机时,Docker中的容器无法访问

一、问题最近在VMware恢复挂起虚拟机时,GitLab无法访问二、查找原因在局域网的其他主机上访问gitLab的都超时尝试在安装gitlab的虚拟机上访问$ curl 192.168.25.140<html><body>You are being <a href="http://192.168.25.140/users/sign_in">redirected</a>.</body></html>有登录页面访问,

2021-05-10 00:19:40 524 1

原创 Harbor使用之同步镜像

1. 新建仓库管理目标来到harbor页面,进入系统管理/仓库管理,新建目标完成后2. 新建同步Job进入/系统管理/同步管理3. 执行同步4. 执行结果5. 注意事项新建同步任务时,如果远程镜像没有项目前缀,必须要加上harbor的前缀,例如:jdk1.8:latest镜像必须改成/${project}/jdk1.8:latest,否则执行同步会一直失败...

2021-05-10 00:18:45 3261

原创 springboot更新版本造成no main manifest attribute

最近把springboot版本提升到2.1.6.RELEASE,springcloud版本提升到Greenwich.SR2推送远程镜像到rancher时一直无法启动,查看日志显示no main manifest attribute, in /app.jar打包工具都没有改过,以前都没问题的,然后鼠标点了一下打包插件发现没有版本号! <plugin> <groupId>org.springframework.boot</groupId> <art

2021-05-10 00:18:04 317

原创 Harbor安装

Harbor安装一 、介绍1. Docker register和Harbor区别略二、 安装1. docker安装略2. docker-compose安装略3. Harbor安装3.1 下载安装包Harbor-1.8.0高速下载地址github地址推荐第一个下载,github如果没有vpn下载很慢3.2 解压tar -zxvf harbor-offline-installer-v1.8.0.tgz3.3 修改配置文件3.4 导入离线包docker load -i ha

2021-05-10 00:17:04 112

原创 Nacos 安装

Nacos一、Spring Cloud 、Spring Cloud Alibaba 、Nacos版本对应关系官方版本说明版本说明format edited this page 2019/7/1 · 13 revisions版本依赖关系Spring Cloud VersionSpring Cloud Alibaba VersionSpring Boot VersionSpring Cloud Greenwich0.9.0.RELEASE2.1.X.RELEASESp

2021-05-10 00:15:38 352

原创 本地安装Easy-Mock服务

本地安装Easy-Mock服务方法一:直接安装###一、安装步骤1.1 安装NodeJs(1)nodeJs_v8.11.1下载注意必须安装v8.11.1版本,v10版本一直报错,官方issue也有相关解答(2)解压xz文件xz ‐d node‐v8.11.1‐linux‐x64.tar.xz(3)解压tar文件tar ‐xvf node‐v8.11.1‐linux‐x64.tar(4)目录重命名mv node‐v8.11.1‐linux‐x64 node(5)移动目录到/us

2021-05-10 00:14:31 249

原创 docker-compose 安装

安装docker-compose官方地址1. 下载docker-compose官方sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composeDaoCloud镜像加速sudo curl -L https://get.daocloud.io/docker/com

2021-05-10 00:12:44 124

空空如也

空空如也

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

TA关注的人

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