自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目实战系列【总】

1.解决Mybatis-plus利用collection查询一对多分页数据的Bug2.swagger在线文档无法访问的一次踩坑记3.以压缩包的方式批量下载文件【项目实战总结】

2023-07-14 11:19:28 1156

原创 Spring系列【总】

Spring 系列之 Spring 整体架构和环境搭建【一】Spring 系列之 Spring 源码笔记:容器的基本实现-上【二】Spring 系列之 Spring 源码笔记:容器的基本实现-中【三】Spring 系列之 Spring 源码笔记:容器的基本实现-下【四】Spring 系列之 Spring 源码笔记:解析默认标签-上【五】Spring 系列之 Spring 源码笔记:解析默认标签-中【六】Spring 系列之 Spring 源码笔记:解析默认标签-下【七】Spring 系列之

2023-07-14 11:19:02 1733 1

转载 HashMap扩容时(resize方法)链表中节点处理细节(e.hash & oldCap) == 0算法推导

3. (2oldCap -1)=2 ^ 4-1=01111,其二进制位数比oldCap多一位,但多的这一位是0,其余都是1(其低三位肯定也是1,其从左到右数的第4位为1);0,若想要e.hash&oldCap的结果不为0,则e.hash的二进制形式中与对应oldCap的二进制的1的位置一定不为0,其他位置的可以随意,这样即可保证结果不为0;0,若想要e.hash&oldCap的结果为0,则e.hash的二进制形式中与对应oldCap的二进制的1的位置一定为0,其他位置的可以随意,这样即可保证结果为0;

2023-08-26 21:44:15 1018

原创 Spring 系列之 Spring 源码笔记:bean 的加载-下【十一】

Spring 中不但提供了对于初始化方法的扩展入口,同样也提供了销毁方法的扩展入口。

2021-07-24 10:14:38 363

原创 Spring 系列之 Spring 源码笔记:bean 的加载-中【十】

循环依赖就是循环引用,就是两个或多个 bean 相互之间的持有对方,比如 CircleA 引用 CircleB,CircleB 引用 CircleC,CircleC 引用 CircleA,则他们最终反映为一个环。此处不是循环调用,循环调用是方法之间的环调用。循环调用是无法解决的,除非有终结条件,否则就是死循环,最终导致内存溢出错误。

2021-06-15 23:55:01 389 2

原创 Spring 系列之 Spring 源码笔记:bean 的加载-上【九】

经过前面的分析,完成了对 XML 配置文件的解析,接下来会面临更大的挑战,就是对 bean 加载的探索。bean 加载的功能实现远比 bean 的解析要复杂的多,同样,以先看下实现代码:仅从代码量上就能看出 bean 的加载经历了一个相当复杂的过程,其中涉及各种各样的考虑。对于加载过程中所涉及的步骤在代码中已经进行了详细地注释,其中最重要的是步骤8,针对不同 scope 进行 bean 的创建,你会看到各种常用的 Spring 特性在这里的实现。下面的图反映了整个过程:fill:#333;123。

2021-06-02 18:41:29 415 2

原创 Spring 系列之 Spring 源码笔记:解析自定义标签【八】

在很多情况下,需要为系统提供可配置化支持,简单的做法可以直接基于 Spring 的标准 bean 来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。一般的做法会使用原生态的方式去解析定义好的 XML 文件,然后转化为配置对象。这种方式当然可以解决所有问题,但是实现起来比较繁琐,特别是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。

2021-05-30 22:32:07 471 3

原创 Spring 系列之 Spring 源码笔记:解析默认标签-下【七】

到这里已经完成了分析默认标签的解析与提取过程,因为涉及的内容太多,可以已经忘记了从哪个函数开始的,再次回顾下默认标签解析函数的起始函数:前面已经用了大量的篇幅分析 BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele);这行代码了,下面要进行 bdHolder = delegate.decorateBeanDefinitionIfRequired(ele, bdHolder);

2021-05-20 15:58:56 203 1

原创 Spring 系列之 Spring 源码笔记:解析默认标签-中【六】

到这里就完成了对 XML 文档到 GenericBeanDefinition 的转换,也就是说,XML 中所有的配置都可以在 GenericBeanDefinition 的实例类中找到对应的配置。GenericBeanDefinition 只是子类实现,而大部分的通用属性都保存在了 AbstractBeanDefinition 中。下面看下 AbstractBeanDefinition 的属性来回顾下都解析了哪些对应的配置。/**// 这里省略了静态变量以及 final 常量 /**

2021-05-19 23:53:51 399 3

原创 Spring 系列之 Spring 源码笔记:解析默认标签-上【五】

接上篇文章。

2021-05-15 18:58:07 265 3

原创 Spring 系列之 Spring 源码笔记:容器的基本实现-下【四】

对于解析一个 XML,SAX 首先读取该 XML 文档上的声明,根据声明去寻找相应的 DTD 定义,以便对文档进行一个验证。默认的寻找规则,即通过网络(实际上就是生命的 DTD 的 URI 地址)来下载相应的 DTD 声明,并进行认证。下载的过程是一个漫长的过程,而且当网络中断或者不可用时,这里会报错,就是因为相应的 DTD 声明没有被找到。

2021-05-12 18:34:37 216

原创 Spring 系列之 Spring 源码笔记:容器的基本实现-中【三】

this.reader.loadBeanDefinitions(resource) 时序图:XmlBeanFactoryXmlBeanDefinitionReaderEncodedResourceResourceInputSourceloadBeanDefinitions(resource)1new EncodedResource(resource)2encodedResource:EncodedResource3loadBeanDefinitions(encodedResource)4getResourc

2021-04-28 23:55:28 243

原创 Spring 系列之 Spring 源码笔记:容器的基本实现-上【二】

XmlBeanFactory 继承 DefaultListableBeanFactory,而DefaultListableBeanFactory 是整个 bean 加载的核心部分,是 Spring 注册及加载 bean 的默认实现,DefaultListableBeanFactory 继承了 AbstractAutowireCapableBeanFactory 并实现了 ConfigurableListableBeanFactory 以及 BeanDefinitionRegistry 接口。

2021-04-23 23:43:45 337

原创 Spring 系列之 Spring 源码笔记:整体架构和环境搭建【一】

Spring 是于 2003 年兴起的一个轻量级 Java 开源框架,主要为了解决企业应用开发的复杂性,它使用基本的 JavaBean来完成以前只可能由 EJB 完成的事情。Sping 适用于一切 Java 应用。

2021-04-22 18:31:30 328 1

原创 项目实战系列之以压缩包的方式批量下载文件【三】

公司项目里有个需求,需要以压缩包的方式批量下载文件。前几天开发完成功能后,一直没时间总结,这里做个总结,希望可以帮到别的朋友。先贴下代码,如下:package cn.deepcap.common.utils;import cn.deepcap.common.exception.PlatformAlertException;import cn.deepcap.common.support.nas.FileStorageUtils;import lombok.extern.slf4j.Slf4j;

2021-04-16 16:04:44 476

原创 项目实战系列之swagger在线文档无法访问的一次踩坑记【二】

目前公司用的swagger在线文档,可是昨天我更新代码后,文档就打不开了,访问的时候后台报错,下面上图:开始也不知道是为什么,以为项目哪个地方有了问题,上厕所的时候,问了一个同事,他那居然可以,由于着急调试接口,就用postman测了一下,今天来上班发现还是不行,然后我就打断点跟了下代码:这里需要用异常断点调试,不然swagger会拦截项目里写了swagger的注解,如图:根据description找到对应的位置:因为在我平时的写法中,没有参数名后面用中括号的,而且这里是Delete请求方

2021-04-08 15:00:23 2627

原创 idea使用Gradle构建Spring源码

最近在研究spring源码,所以需要使用idea构建spring源码,构建过程遇到了各种坑,自己一边网上搜索和进行各种尝试,最后终于构建成功了,所以写下这篇博客记录,希望能帮助别人。1. 版本问题首先要解决的就是IDEA、JDK、Gradle、Kotlin问题。每一版的IDEA都有关于gradle和kotlin版本的限制,可以通过idea官网查看kotlin版本的限制,而关于gradle的限制(最低版本)如图所示(我这里用的2018.1版本的idea):gradle 和 kotlin 存在版.

2021-01-14 15:01:46 964

原创 项目实战系列之解决Mybatis-plus利用collection查询一对多分页数据的Bug【一】

今天开发一个分页功能的时候,前端找我说数据不对。自己测试了一下,果然有问题。请求参数如下:相应结果如下(字段太多,删除了一些非关键字段):total是总记录数的意思,有4条,但是结果只有3条。网上搜索一番,定位到问题所在,这个是mybatis-plus关于分页的一个bug,我这里的collection写法如下:需要改一下collection的写法,分成两次查就可以了:说明:column是关联的id,意思就是根据哪个字段来查询关联表的字段;另外需要删除原来写法下一个select语句中col

2020-10-20 17:04:47 6011

原创 MySQL主从复制配置实战

1. 主数据库配置1.1 第1步编辑/etc/my.cnf文件,在[mysqld]下增加如下两行设置:[mysqld]log-bin=mysql-bin # 非必需server-id=1    # 必需1.2 第2步创建用于数据同步的账户:CREATE USER 'repl'@'192.168.67.%' IDENTIFIED BY '123456';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.67.%';FLUSH PRIVI

2020-07-15 18:10:39 201

原创 CentOS7虚拟机克隆

步骤如下:1. 克隆选中要复制的虚拟机,然后右键->管理->克隆,注意必须要关机才可以进行克隆:克隆步骤如下:选择下一步:下一步:选择完整克隆:修改虚拟机名称和位置,点击完成等待即可:结束后就会显示克隆的虚拟机:2. 修改配置因为192.168.67.11是我克隆第一台虚拟机的时候设置的,中间遇到问题解决掉了,配置成功前使用远程连接工具是连接不上的,而VMware的窗口又不能滑动,所以不好重现配置过程和解决问题过程。所以这里演示192.168.67.21(第二台虚

2020-07-15 17:13:02 3207

原创 Linux安装redis并设置开机自启以及利用小红桶连接(命令行方式)

1. 安装首先在/usr/local目录下创建redis目录,然后进入到该目录下:mkdir /usr/local/rediscd /usr/local/redis进入redis目录后,执行下面命令,获取redis安装包,并且解压:// 获取redis安装包wget http://download.redis.io/releases/redis-4.0.8.tar.gz// 解压tar -xzvf redis-4.0.8.tar.gz解压后执行如下操作:// 进入解压目录cd

2020-07-10 18:04:59 363

原创 Linux安装nginx并设置开机自启(命令行方式)

1. 安装依赖包//一键安装下面四个依赖gcc/zlib/prec-devel/opensslyum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2. 下载并解压安装包在/usr/local文件夹下创建nginx文件夹:mkdir /usr/local/nginx然后进入到nginx文件夹下,下载nginx安装包,并解压:cd /usr/local/nginx# 下载安装包wget http://ngi

2020-07-09 18:01:05 24426 2

原创 Linux安装tomcat8以及设置开机自启并且解决访问Manager App报403错误(安装包方式)

1. 安装tomcat8首先去官网下载安装包,官网地址:https://tomcat.apache.org/download-80.cgi,我这里下载的是:然后在/usr/local下创建tomcat文件夹:然后把安装包上传到该文件夹下,并解压:修改/etc/profile配置文件:添加如下内容:保存退出后使配置文件生效,然后进入tomcat的bin目录:启动tomcat:出现Tomcat started 说明启动成功了。但是开机后还需要手动启动,可以参考这篇文章设置开机自启

2020-07-09 14:56:16 305

原创 Linux安装jdk1.8和mysql5.7以及设置mysql开机自启(安装包方式)

前面两篇文章分别介绍了VMware安装CentOS7并且使用NAT模式上网设置和使用连接工具连接虚拟机,文章链接:VMware安装CentOS7使用NAT模式进行上网配置,只需四步!!!使用MobaXterm连接linux的注意事项!那么接下来就是利用连接工具安装jdk1.8和mysql数据库了。因为安装jdk1.8很简单,没什么坑,所以和安装mysql放在一起总结一下。1. 安装jdk1.8首先到jdk官网上下载linux版的安装包。官网由于证书问题wget 不能直接下载,需要加忽略证书和请

2020-07-08 18:19:01 778

原创 使用MobaXterm连接linux的注意事项!

之前一篇文章中,介绍了VMware安装CentOS7使用NAT模式进行上网设置,文章链接:VMware安装CentOS7使用NAT模式进行上网配置,只需四步!!!,然后我很开心的就用连接工具MobaXterm去连接,发现连接不上。其实只需两步操作就可以成功连接。1. 关闭linux防火墙命令:...

2020-07-08 12:10:24 2636

原创 VMware安装CentOS7使用NAT模式进行上网配置,只需四步!

VMware安装CentOS7后是不能进行上网的,VMware默认选用的是NAT模式。1. 首先配置虚拟网络编辑器然后点击虚拟网络编辑器,出现如下弹窗:点击NAT设置,出现弹窗:2. 配置宿主VMnet8网卡我这里用的以太网,以以太网举例,首先右键以太网选择属性,在如下弹窗中选择VMnet8:然后右键设置VMnet8的IPV4属性:说明:IP地址与虚拟网关要在同个网段(如:192.168.204.100)网关:虚拟网关的地址(如:192.168.204.2)子网掩码:与虚

2020-07-07 14:44:49 5811

原创 关于MyBatis-Plus 自动填充处理器的坑

公司持久层框架使用的是Mybatis增强版:Mybatis-Plus,再一次做更新操作时,报了一个错误,由于隔得时间太久,代码也已经进行过改动,所以只有采用其它方式重现一下。问题再现首先新建一个表,很简单没什么说的:新建一个实体类:package com.aecc.smart.fire.server.entity;import com.baomidou.mybatisplus.annotations.TableField;import com.baomidou.mybatisplus.ann

2020-07-02 18:12:05 1661 2

原创 idea实用插件Free MyBatis plugin、Maven Helper、GsonFormat和快速生成maven依赖技巧

1. Free MyBatis plugin这个插件主要实现了mapper和xml的快速跳转,不用每次查找sql的时候全局搜索了。安装过程不多说,这个插件介绍如下:常用的就是第二个功能:快速从xml代码跳转到mapper文件和从mapper文件跳转到xml代码。如图所示,点击箭头即可实现跳转:2. Maven Helper这个插件主要用来解决maven冲突插件介绍如下:安装完成后,打开pom.xml文件,会多出一个Dependency Analyzer选项卡:点击后界面如下:

2020-06-30 16:47:06 1029

原创 视频播放组件实战【LivePlayer H5播放器】

在公司项目开发中,有一个项目里面需要做一个视频播放的功能,播放方式是调用海康平台提供的接口获取流地址来进行视频的播放并且最重要的是需要支持flash。由于前端用的Vue,对比了几个,最后选择了LivePlayer H5播放器。官网介绍:H5直播/点播播放器,使用简单,功能强大, 免费使用。官网地址:https://www.liveqing.com/docs/manuals/LivePlayer.htmlgithub源码地址:https://github.com/livegbs/GB28181-S.

2020-06-29 12:15:44 11502 6

原创 Spring/SpringBoot系列之SpringBoot集成ShardingSphere实现分库分表实战【二十四】

1. 前言去年开发一个项目的时候,因为系统的核心数据是定时从外界发送过来的,数据量比较大,后来很快单表就达到了千万级别,这就需要分库分表,最后选择了ShardingSphere,原因就是比较容易上手。2. Sharding JDBC简介官网地址:https://shardingsphere.apache.org/如上图所示,当前版本是4.x,并且官网支持中文阅读。点击文档下拉4.x版本:简介如下:ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sha

2020-06-25 22:51:00 3239 1

原创 Spring/SpringBoot系列之@Configuration详解【十九】

现在大部分的Spring项目都采用了基于注解的配置,使用@Configuration 标记类作为配置类 替换 xml配置文件。一行简单的注解就可以解决很多事情。但是,其实每一个注解背后都有很多值得学习和思考的内容。比如:@Configuration有什么用?@Configuration和XML有什么区别?哪种好?@Autowired 、 @Inject、@Resource 之间有什么区别?@Value、@PropertySource 和 @Configuration?Spring如何处理带@Co

2020-06-22 18:04:45 41142 1

原创 Spring/SpringBoot系列之SpringBoot处理静态资源【十三】

进行web开发的时候,有很多静态资源,比如html、图片、css等。在前后端不分离的架构下,以前的传统的spring项目里面有一个webapp目录,只要把静态资源放到该目录下就可以直接访问,但是基于SpringBoot的工程没有这个目录,那应该如何处理?1. 通过流直接返回给前端在resources根目录下建立一个html的目录,然后创建一个测试的index.html,然后把index.html文件放在html目录下,并且规定访问路径为/index时访问静态资源index.html,实现代码:pa.

2020-06-17 11:54:54 2598

原创 Spring/SpringBoot系列之SpringBoot内嵌的Tomcat是如何启动的【十二】

1. 前言因为SpringBoot 内置了Tomcat容器,所以可以把 web 程序打成 jar 包,直接启动,而且在开发中也不需要像传统Spring项目那样,需要把项目添加到Tomcat中进行启动。不得不说,Springboot确实在方方面面提高了开发效率。2. 从 Main 方法说起SpringBoot 项目有一个启动类,启动类里有一个 main 方法用来启动整个应用:run()方法调用链:SpringApplication.run(DemoApplication.class, args

2020-06-16 17:59:16 2135

原创 Spring/SpringBoot系列之SpringBoot自定义starter实战【十一】

阅读本文前,推荐阅读:Spring/SpringBoot系列之SpringBoot 自动配置原理【十】SpringBoot的核心就是自动配置,而支持自动配置的是一个个starter项目。除了官方已有的starter,也可以根据规则自定义自己的starter项目。而 Starter项目的核心就是条件注解 @Conditional,当 classpath 下存在某一个 Class 时,某个配置才会生效。下面来进行实战:1. 创建starter项目该操作共分为7步:创建一个maven项目;导入依赖sp

2020-06-16 15:23:59 731

原创 Spring/SpringBoot系列之SpringBoot 自动配置原理【十】

阅读本文前,最好先阅读:Spring/SpringBoot系列之SpringBoot 源码常用注解【九】1. SpringBoot 启动过程在SpringBoot源码中以下四个接口的子类的方法经常被调用:ApplicationContextInitializerApplicationRunnerCommandLineRunnerSpringApplicationRunListener下面开始分析源码,先从 SpringBoot 的启动类的 run() 方法开始看,以下是调用链:Sp

2020-06-12 18:02:37 326

空空如也

空空如也

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

TA关注的人

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