自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(251)
  • 资源 (5)
  • 收藏
  • 关注

原创 SpringBoot过滤器获取Request的body数据

由于在SpringBoot过滤器或者拦截器中,request中getReader()和getInputStream()只能调用一次,到controller里数据就为空了,因此会导致Controller中@RequestBody的参数无法注入而导致 400 错误。

2023-11-16 11:11:20 491

原创 Mybatis TypeHandler 介绍及使用

我们可以直接继承BaseTypeHandler来实现我们自己的类型转换器throw new IllegalArgumentException("输入参数不能为空");@Overridetry {throw new RuntimeException("Json对象转换成String失败", e);@Override@Override@Overridetry {throw new RuntimeException("json转换成Java对象失败", e);

2023-10-19 13:57:24 2018

原创 jdk 8 List相关知识点

如果只需检查元素是否存在,使用 List.contains。

2023-10-12 10:40:35 143

原创 jdk 8 hashMap相关知识点

这些方法允许您对 Map 中的键值对进行灵活的操作,根据需要更新、插入或删除键值对。

2023-10-12 10:39:04 98

原创 使用多线程导入大量数据,多线程事物控制

Mybatis多线程批量导入大量数据多线程事物控制TransactionManagerTransactionTemplate

2023-08-29 10:11:53 1538

原创 mac系统使用mvn打包时报错:No compiler is provided in this environment. Perhaps you are running on a JRE

但是我本地的环境都是OK的,环境变量也设置好了的但是mvn还是报下下面这个错误。

2023-06-05 16:40:44 820

原创 Spring boot ResponseBodyAdvice接口全局统一返回控制,Api返回值是String 类型时异常

在大部分前后端分离项目中,后端的返回值基本都需要包装成一个GlobalResponse,其中属性有code、message、data等,来供前端使用。这样就导致大部分Api写完后都需要手动构建一个GlobalResponse对象并填充属性返回,也就造成了大量的重复代码。这类代码其实有很方便的处理方式,就是使用spring提供的responseBodyAdvice接口

2023-03-01 17:40:05 3083 1

转载 详谈 MySQL Online DDL

作为一名DBA,对数据库进行DDL操作非常多,如添加索引,添加字段等等。对于MySQL数据库,DDL支持的并不是很好,一不留心就导致了全表被锁,经常搞得刚入门小伙伴很郁闷又无辜,不是说MySQL支持Online DDL么,不是说不会锁表的么?是的,令人高兴的是从MySQL5.6开始就支持部分DDL Online操作了,但并不是全部喔,今天这里就对我们常用的DDL进行总结和说明,让操作DDL的小伙伴从此做到心中有数,得心应手,让老板们再也不用担心我们做DDL咯。我自己遵守的一条黄金准则:DDL永远不要在业

2021-08-24 10:47:06 535

原创 Mysql online DDL 线上无锁添加索引

只能通过ALTER TABLE不能create indexALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;参数说明:ALGORITHM=INPLACE更优秀的解决方案,在当前表加索引,步骤:1.创建索引(二级索引)数据字典2.加共享表锁,禁止DML,允许查询3.读取聚簇索引,构造新的索引项,排序并插入新索引4.等待打开当前表的所有只读事务提交5.创建索引结束ALGORIT

2021-08-24 10:39:54 3851

原创 解析yml文件 转换 Map

起因有一个需求是把一个yml文件解析成HashMap格式的数据,文件内容如下spring: datasource: serviceDB: jdbc-url: jdbc:mysql://127.0.0.1:3306/serviceDB password: test minimum-idle: 1 idle-timeout: 60000 maximum-pool-size: 150 username: root

2021-07-27 15:14:40 27417

原创 基于EnvironmentPostProcessor实现自定义配置中心

SpringBoot支持动态的读取文件,留下的扩展接口org.springframework.boot.env.EnvironmentPostProcessor。这个接口是spring包下的,使用这个进行配置文件的集中管理,而不需要每个项目都去配置配置文件。这种方法也是springboot框架留下的一个扩展(可以自己去扩展)实现demo自定义CxmRPCConfigEnvironmentPostProcessor类实现EnvironmentPostProcessor接口public cla

2021-07-16 10:47:43 26403 1

转载 Golang 入门-Gin框架安装及使用

一、安装Gin包管理工具以及类库1、安装govendor(包管理工具):必须安装gitgo get github.com/kardianos/govendor2、安装一些辅助的类库:由于直接访问golang.org会因为需要梯子而无法访问,有的就算有梯子也是无法访问的 在这里Gin官方就很友好了,把镜像放到了Gin的官方Github上go get -u -v github.com/ramya-rao-a/go-outline3、接下来安装go-outline和goretur..

2021-07-05 13:57:18 26726

原创 java8 Lambda表达式集合排序

初始化一个集合List<Person> list= new ArrayList<>();for (int i = 0; i < 5; i++) { Person person = new Person(); person.setId(new Random().nextInt(i + 10)); list.add(person);}1. 自然排序list = list.stream().sorted(Comparator.comparing(Perso.

2021-07-02 11:08:22 998

转载 如何阅读一份源代码?

阅读源代码的能力算是程序员的一种底层基础能力之一,这个能力之所以重要,原因在于:不可避免的需要阅读或者接手他人的项目。比如调研一个开源项目,比如接手一个其他人的项目。阅读优秀的项目源码是学习他人优秀经验的重要途径之一,这一点我自己深有体会。读代码与写代码是两个不太一样的技能,原因在于“写代码是在表达自己,读代码是在理解别人”。因为面对的项目多,项目的作者有各自的风格,理解起来需要花费不少的精力。我从业这些年泛读、精读过的项目源码不算少了,陆陆续续的也写了一些代码分析的文章,本文中就简单总结一下我

2021-04-12 11:48:22 253

原创 解决Mybatis-plus 批量插入太慢的问题,提升插入性能

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,旨在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。特点 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 支持 Lambda 形式

2021-04-10 14:41:15 37571 8

原创 MySQL TokuDB引擎安装详解

背景: TokuDB引擎是有Tokutek开发的一个数据库存储引擎,在设计之初便引入了独特的索引算法,在其官网测试的文章中看到TokuDB性能比InnoDB高出很多。MySQL是一个插件式的数据库,在MySQL5.5版本之前MyISAM是MySQL的默认存储引擎,在之后的版本中默认的存储引擎变成了InnoDB。其特点是它支持事务,具有完善的崩溃恢复机制,具体的特点这里不说明,可以自行的寻找资料。这里介绍的TokuDB和InnoDB有很多相似之处:一个高性能,支持事务、MVCC、...

2021-04-09 15:24:28 26770 1

转载 Java中sin、log、tan等复杂数学运算怎么搞?

出处 | 程序猿DD 责编 | 张红月MXReflection,一个基于mXparser库功能的Java复杂计算框架。还记不记得求学时代各种复杂的数学公式?sin、log2、tan等等等,是不是看到这就觉得算起来麻烦?通过MXReflection框架,你可以使用Java计算这些曾经我们觉得无比复杂的数学运算和函数,只需使用与类相关的字段。MXReflection可以从指定字段读取值,并将结果注入@Expression注释字段。<dependency><gro...

2021-03-30 20:00:39 471

原创 MySql的sql语句执行顺序

MySql的sql语句执行顺序FROMtable1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 JOINtable2 所以先是确定表,再确定关联条件 ONtable1.column = table2.columu 确定表的绑定条件 由Temp1产生中间表Temp2 WHERE对中间表Temp2产生的结果进行过滤 产生中间表Temp3 GROUP BY对中间表Temp3进行分组,产生中间表Temp4 HAVING对分组后的...

2021-02-25 16:58:48 25964

转载 mysql中空值和null值的区别及处理方法总结

一直对空值和null值的概念理解不清晰,所以结合资料以及自己的理解对他们的区别和处理方式进行总结。首先就是在概念上的不同:1、空值不占空间2、null值占空间。打个比喻就是空值表示一个杯子是真空状态,什么都没有,而null值是杯子中有空气。接下就建立一个测试表比较它们之间的区别:发现报错,colA的值不能是null值。再插入一条数据,这个时候发现向colB一列插入null成功。再插入二列数据发现向colA一列插入空值成功,而colB列既可以插入空值,也可以插入

2021-02-25 16:09:31 1231

原创 Mysql GROUP BY 排除null数据

在使用group by某列名进行分组统计时,该列名的数据有些为 null, 因而会出现 null 的数据行全部分成一组导致数据错误,所以 null 列名的数据行不能执行group by直接执行查询得到的结果为:使用group by进行查询得到的结果为:很明显,因为master_name有的列为空,所以导致分组的时候将master_name为空的全部合并到一组去了解决方案:IFNULL() 函数和 UUID() 函数网上有类似的解决方案,通过IFNULL()函数搭配UUID..

2021-02-25 15:46:26 26577

转载 ExecutorService——shutdown方法和awaitTermination方法

ExecutorService的关闭shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。方法简介 shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorService停止接收新的任务并且等待已经提交的任务(包含提交正在执行和提交未执行)执行完成。当所有提交任务执行完毕,线程池即被关闭。 awaitTermination方法:接收人timeout和TimeUnit

2021-01-28 17:31:54 910

转载 Java子类与父类之间的对象转换(说明继承)

在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换。从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子类对象的时候,通过把变量定义为父类型,我们可以通过一个变量,使用该父类型的所有子类型实例;从父类型向子类型的转换称为向下转换(downcasting),通过向下转换,我们能在必要的时候,将父类型变量转换成子类型变量,使用一些通过子类型才能够使用的方法。以下是我对于对象转换的一些个人理解,如有不对,欢迎指正,虚心

2021-01-06 10:43:41 1016

转载 Redis源码解析 - eventloop(redis调度的核心)

相信大家在很多关于Redis的文章里面都看过一句话:redis是单进程的,所以它不用考虑那么多多进程编程带来的麻烦。这话其实不完全正确。如果你读过Redis源码,你肯定知道,Redis存在一个主进程,同时还会有多个子进程。只是它的子进程通常是用于处理某个临时性的任务(比如RDB持久化过程、AOF的rewrite、主备之间的全同步等等,都是比较耗时的任务),一旦任务处理完就销毁了。今天,我们要讨论的问题是,在这个主进程里面,它的调度核心 - eventloop。写过C语言的都清楚,任何一个C语言程序的

2020-12-05 14:51:39 315

原创 增强Spring @CacheEvict实现key模糊匹配清除

系统中集成了Spring cache 使用@CacheEvict进行缓存清除,@CacheEvict可以清除指定的key,同时可以指定allEntries = true清空namespace下的所有元素,现在遇到一个问题使用allEntries = true清空namespace的值只能是常量,但是我现在需要将缓存根据租户的唯一TelnetID进行分离,这就导致allEntries = true不能使用了,否则一旦触发清除缓存,将会导致全部的缓存清空,而我只想清空当前租户的缓存,熟悉re...

2020-12-05 14:47:41 26190 9

转载 硬核!15张图解Redis为什么这么快

作为一名服务端工程师,工作中你肯定和 Redis 打过交道。Redis为什么快,这点想必你也知道,至少为了面试也做过准备。很多人知道Redis快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两可。那么今天就和小莱一起看看:基于内存实现这点在一开始就提到过了,这里再简单说说。Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程会受到磁盘 I/O 的限制。而对于内存数据库来说,本身数据就存在于内存里,也就没有...

2020-10-26 15:21:54 147

转载 就这一次,搞定异常!

异常的分类Throwable类Throwable:所有异常都是由Throwable继承而来的,可以通过继承Throwable来实现新的异常,但是一般不推荐这样做,下一层分为了两个分支:Error和ExceptionError类Error类来用描述java运行时系统内部引起的错误和资源消耗错误,因为是java内部的错误,因此编写的应用程序无能为力。Exception类Exception:Exception类又可以分为IOException和RuntimeException,一般程.

2020-10-26 14:08:26 215

转载 面向对象的三大基本特征和五大原则

面向对象的三大基本特征封装(Encapsulation)所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。继承(Inheritance

2020-10-22 19:50:23 296

原创 MySQL查询整个库、指定库、指定表的存储使用大小

1:查询整个数据库,整个库的大小;单位转换为G:select concat(round(sum(DATA_LENGTH/1024/1024/1024),2),'G') as datafrom information_schema.TABLES;2:查询mysql数据库,某个库的大小:select concat(round(sum(DATA_LENGTH/1024/1024/1024),2),'G') as datafrom information_schema.TABLES...

2020-09-28 15:44:26 401

原创 Mysql中的 GROUP BY WITH ROLLUP用法

1.WITH ROLLUP:在group分组字段的基础上再进行统计数据。例子:首先在name字段上进行分组,然后在分组的基础上进行某些字段统计,表结构如下:CREATE TABLE `test` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(25) DEFAULT NULL COMMENT '标题', `uid` int(11) DEFAULT NULL COMMENT 'uid', `money` decimal(

2020-09-25 10:41:02 1834

原创 Spring boot ResourceLoader获取指定package目录下所有的类和方法

利用Spring boot ResourceLoader可以获取指定package目录下所有的类和方法,其中关键的两个点是ResourcePatternResolver和CachingMetadataReaderFactory具体实现方法:@Autowiredprivate ResourceLoader resourceLoader; @Overridepublic void run(String... args) throws Exception { ResourcePattern.

2020-09-08 14:05:46 2029

原创 Eclipse安装查看java字节码插件Bytecode Outline查看java字节码信息

一 :安装二:使用输入by,同时选中这两个选项,点击确定按钮接下来就可以查看.java文件编译后对应的字节码了

2020-09-04 20:34:35 810 1

原创 九种分布式ID生成算法详解

一、分布式ID简介1、什么是分布式ID?在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表,但分库分表后需要有一个唯一ID来标识一条数据,数据库的自增ID显然不能满足需求;例如我们的订单,需要有一个全局唯一标识的订单号,这个订单号就是分布式ID2、分布式ID需要满足那些条件? 全局唯一:必须保证ID是全局性唯一的,基本要求 高可用: 高性能:高可

2020-09-04 19:53:56 21227

原创 Mybatis resultMap 继承使用

一、代码映射domain为继承关系public class CocTreeNode extends CocBean implements TreeNode<CocTreeNode> { private String level1, level2; public void setLevel1(String level1){...} public void setLevel2(String level2){...} public String getLevel1

2020-09-01 14:30:42 874

原创 Java substring() 方法

substring() 方法返回字符串的子字符串。语法public String substring(int beginIndex)或public String substring(int beginIndex, int endIndex)参数 beginIndex-- 起始索引(包括), 索引从 0 开始。 endIndex-- 结束索引(不包括)。 返回值子字符串。1、取得的字符串长度为:endIndex - beginIndex;2、从b...

2020-08-24 14:09:00 210

转载 Redis五大数据结构的操作

Redis五大基本数据结构字符串 string 哈希类型 hash 列表类型 list 集合类型 set 有序集合类型 sortedset基本操作字符串 string存储 set key value 例:set username tom 获取 get key 例:get username 删除 del key 例:del username如下图所示:哈希类型 hash存储 hset key field value 例:hset user username to

2020-08-24 13:14:44 150

转载 Redis为什么又引入了多线程?难道作者也逃不过“真香定理”?

相信你一定不止一次见过Redis是单线程模式,不过说实话那只是个老版本,这个问题是一位老哥的大厂面试题,跟我分享了一下。想着自己就知道redis6.0以前一直都是单线程,到了6的版本才加入了多线程,还不是很清楚,在多方打听并且搜索之下总结了这篇文章。一、问题概述Redis 6.0 之后的版本抛弃了单线程模型这一设计,原本使用单线程运行的 Redis 也开始选择性使用多线程模型,乍一看Redis的作者这么牛,也逃不过“真香定律”,仔细想想,这个问题其实可以拆分,拆分为两个主要的问题:(1)为什

2020-08-21 10:14:33 246

转载 自己动手编写一个Mybatis插件:mybatis脱敏插件

1. 前言在日常开发中,身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。否则容易造成个人隐私泄露,客户资料泄露,给不法分子可乘之机。但是数据脱敏不是把敏感信息隐藏起来,而是看起来像真的一样,实际上不能是真的。我以前的公司就因为不重视脱敏,一名员工在离职的时候通过后台的导出功能导出了核心的客户资料卖给了竞品,给公司造成了重大的损失。当然这里有数据管理的原因,但是脱敏仍旧是不可忽略的一环,脱敏可以从一定程度上保证数据的合规使用。下面就是一份经过脱敏的数据:2. Mybatis 脱敏插件

2020-08-20 10:24:15 484

原创 Fastjson解析json对象出现$ref: “$.list[0]“的解决办法

今天定义了一个JSONObject对象,引用的com.alibaba.fastjson.JSONObject,循环给这个对象赋值出现"$ref":"$[0]"现象,/** * fastjson中$ref对象重复引用问题 * * 介绍: * FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测。 * 关闭引用检测后,重复引用对象时就不会被$ref代替,但是在循环引用时也会导致StackOverf

2020-08-18 18:59:56 717

原创 MyBatis批量操作报错:nested exception is org.Parameter ‘xxxList‘ not found. Available parameters are [list]

在Dao中使用MyBatis进行查询操作,参数是传的一个List:studentNameList,但是在执行查询的时候报错,具体日志如下:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'personIdList' not found. Available parameters are [collection, lis

2020-08-18 18:54:30 523

转载 运行python “没有那个文件或目录3” 或 “/usr/local/bin/python3^M: bad interpreter: 没有那个文件或目录” 错误...

原因如果使用的是#!/usr/local/bin/python3这种方式,就会出现“/usr/local/bin/python3^M: bad interpreter: 没有那个文件或目录” 错误:如果使用的是#!/usr/bin/env python3这种方式,就会出现“没有那个文件或目录3”错误:出错的原因就是代码的每一行最后都多了3^M,这是由于我在Windows上编写的代码,然后放到Linux上时就会出错。然而打开代码来看是正常的,但是用使用 cat -v 命令查看文..

2020-08-14 14:38:29 1646 1

深入理解Java虚拟机(第2版)

《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》内容简介:第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的改进:根据最新的JDK 1.7对全书内容进行了全面的升级和补充;增加了大量处理各种常见JVM问题的技巧和最佳实践;增加了若干与生产环境相结合的实战案例;对第1版中的错误和不足之处的修正;等等。第2版不仅技术更新、内容更丰富,而且实战性更强。

2018-04-17

docker常用命令

docker命令、包括重启、删除容器、删除镜像等等;查看容器详细信息;进入到docker容器等常用命令

2018-01-17

feign调用session丢失解决方案.txt

feign调用session丢失解决方案, Hystrix传播ThreadLocal对象; 自定义熔断策略

2018-01-17

git提交代码注释规范

git提交代码注释规范、git提交常用操作的规范指南、[A] 新增 :(新加入的需求) [M] 修改 :( 修改或者重构代码) [D] 删除 :(删除多余的文件 ) [F] 修复 :(修复bug)

2018-01-12

GIT使用指引

GIT使用指引,包括git提交、合并、解决冲突、找到历史版本等操作

2018-01-12

空空如也

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

TA关注的人

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