自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 持续更新MySQL和ORACLE实操区别

最近由于项目需要用上了oracle,几天感受下来感觉区别还是挺多的,方方面面,所以打算开一篇博,不详述,简单地持续更新。由于对Oracle不是很熟悉,如有错误谢谢指正: 1.MySQL是可以设置主键自增的,但在Oracle里想让主键自增要先选一个number类型字段作为主键,然后自己写序列和触发...

2019-11-04 15:19:55 42 0

原创 将一个maven项目和第三方依赖一起打成没有main-class的普通jar
原力计划

最近开发的项目需要给一个jdk1.7的项目写一个SDK,而且这个jdk1.7的项目也不是maven项目,是那种原始的java web。既然这样,想法就有了。开发这个SDK的时候我是肯定要用maven的,打包的时候可以打成一个普通jar包,并且把第三方依赖也打进jar包中,还要注意开发编译得用jdk...

2020-06-30 18:59:54 26 0

原创 记录前几天在一台内网服务器中先装Docker再装RabbitMQ的经历
原力计划

开发的时候需要在测试环境安装RabbitMQ,而测试环境一般是不会去麻烦运维大哥的,所以就自己安装。想着直接yum install不就好了嘛,当时也没当回事。可以在真正安装的时候傻眼了,测试服务器是一台内网服务器,直接yum install根本不行,因为只能用公司自己的镜像源,这不完了嘛,早知道就...

2020-06-18 16:55:29 87 0

原创 利用AOP简单实在的防止系统垂直越权

还是前几篇博客中提到过的项目,接盘过来后一直在重构它。重构的过程中,JIRA就给我发了个警告: 天呐真的是会给我找事情,那就趁着这次重构顺便解决它吧。 一个成熟的系统权限控制都会用角色去控制用户权限,比如admin管理员和operate操作员两个角色,如果系统中某个功能只能管理员使用,但是...

2020-06-16 15:40:56 73 0

原创 今天绞尽脑汁地去防止RabbitMQ消息丢失
原力计划

项目中有一个往ES里面写数据的逻辑,可是数据比较多往ES里面写得很慢,影响系统处理效率。最近在做的事就是将数据写进ES优化为异步动作,这样就不会影响项目处理接下来逻辑了。方案选型是用RabbitMQ消息队列做异步,生产环境中的这些数据是很重要的,是不允许丢失的,所以今天也是绞尽脑汁地去防止消息丢失...

2020-06-10 20:03:39 44 0

原创 Spring Cloud用OpenFeign做远程调用的话要注意返回值类型能不能被反序列化
原力计划

每次从零开发一个服务的时候总是遇到各种各样奇怪的问题,今天又从Spring Initializr开始开发一个服务。抄自己的不算抄,本着CV大法优先的原则,从之前其他项目中拷贝了几个component,比如响应Entity封装的类型啊,自定义异常枚举啊这些,如图: 坏就坏在这些不是从Sprin...

2020-06-05 21:04:56 159 0

原创 com.baomidou.mybatisplus在XML中写insert/update的时候要注意有没有parameter
原力计划

事情是这样的,最近在重构旧项目,项目中有一段逻辑调用了Oracle的存储过程,类似于这样: 这段存储过程的SQL是在数据库里面的,非常长,我是很不喜欢在程序中使用存储过程的,这些逻辑也可以放在程序中啊。看不过眼就把这段长长的SQL复制到XML中了,就成了这样: 这是insert,还有u...

2020-06-02 15:21:18 162 0

原创 在SpringBoot中弃用自带的StandardServletMultipartResolver更换为CommonsMultipartResolver也有坑

还是上篇传统Spring项目换SpringBoot框架中的一个问题,先描述一下问题: 整和SpringBoot后系统中的文件上传都不能用了,统统报错如下: 大致就是Failed to parse multipart servlet request; nested exception is ...

2020-05-28 15:07:46 211 0

原创 传统Spring项目换SpringBoot的问题记录

起因就是组内旧项目也要接入现有的微服务部署,该项目大致上就是后台MVC和前端JSP写在了一起,还用了一堆shiro、mybatis-plus这些组件,整改过程想必问题很多,所以写一篇博客,事无巨细,都简单地记录下来。 原项目目录结构如图: 被我一顿换后,改了pom.xml文件加了启动...

2020-05-15 16:34:21 63 0

原创 话不能说得太绝对不然下不了台(单点登录Filter排除部分url)

其实这次的问题解决分分钟按以往习惯是不值得啰嗦一篇博客的,但这次着实有点下不了台,归根结底还是自己对单点登录的jar包不了解,所以想记录一下,以后好好看源码再说话,即: 事情是这样的,现在公司项目集成单点登录不奇怪,负责的一个Spring项目用的这个jar包。老项目了,过滤器是配置在web....

2020-05-13 16:29:41 58 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(完结)

上篇看到了refreshContext()方法: refresh()分析完了,接下来看一下这个shutdownHook,撸源码之前先介绍一下它。 我们做开发的经常需要考虑服务宕机的情况,OOM内存溢出也好,断电断网也好,甚至用户直接点了叉强制退出了。如果服务正在进行很重要的操作处理很重要的...

2020-04-15 19:53:17 73 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(九)

上篇介绍了run()方法中context三连中的prepareContext()方法,先贴一下这个三连: 这篇的重点是refreshContext()方法,先看一下这个方法: 接下来的方法比较多,想着自己写有点懒了,看到其他文章中直接在源码中添加注释的方法还挺直观的,接下来就当一下搬运...

2020-04-15 18:47:04 71 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(八)

上篇遗留了一个问题,即初始化SpringApplication时设置初始化器setInitializers()有什么用。上篇依然是没有看完run()方法,先贴一下run()方法: 上篇看到了打印Banner,继续往下看: ConfigurableApplicationContext是r...

2020-04-07 13:58:17 98 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(七)

上篇看了一部分的run()方法,先贴一下run()方法: 上篇看到了listeners.starting();介绍了SpringBoot启动时的事件发布机制,并且遗留了一个问题,即初始化SpringApplication时设置初始化器setInitializers()有什么用,这篇继续往下看...

2020-04-03 16:05:53 70 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(六)

截止上篇,关于SpingBoot的启动流程终于看完了如何初始化SpringApplication,内容还是挺多的足足写了5篇。并且过程中遗留了一个问题,即初始化SpringApplication的时候设置初始化器setInitializers()和设置监听器setListeners()在启动流程中...

2020-04-02 15:37:06 68 0

原创 孤陋寡闻的我刚知道怎么debug远程服务

之前在IDEA中debug一般也就在本地代码本地起个服务跑一跑,孤陋寡闻的我今天才知道还可以用本地代码去debug远程服务,其实debug远程服务这个应用场景说多不多说少也不少,举个例子,比如你想复现一个bug,可以本地没有数据,在本地代码上debug怎么都复现不了,可是bug在测试服务器上疯狂复...

2020-03-26 15:06:20 59 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(五)

这篇继续看初始化SpringApplication的时候如何设置初始化器的,上篇看到了getSpringFactoriesInstances()方法,先贴出来: 上篇撸了第一行,理了java的类加载相关,继续往下看: 注释说使用名称并确保唯一,以防止重复,这些names被放进了Set集...

2020-03-26 13:51:06 156 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(四)

上篇分析了初始化SpringApplication时是如何推断应用类型的,并且问题依然遗留着,即初始化SpringApplication的时候resourceLoader为null怎么拿类加载器。这篇带着这个问题继续往下撸源码,还是把SpringApplication的构造方法贴一下: 继续...

2020-03-24 18:40:14 93 1

原创 SpringBoot项目启动过程源码终于整体捋了一遍(三)

上篇分析到了构造SpringApplication的过程,为了了解这个主源类primarySources,大致撸了一遍bean加载的过程。同时还遗留了一个问题,已经看到初始化SpringApplication的时候esourceLoader是为了拿类加载器,那如果resourceLoader为nu...

2020-03-23 20:11:52 71 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(二)

上一篇写到run()方法分两步,即: 1.new SpringApplication() 利用主源类primarySources初始化SpringApplication类 2.调用SpringApplication的run()方法启动项目,并传递参数args。 也提到启动的时候主源类prim...

2020-03-21 15:37:29 181 0

原创 没有设置jdbcType的话Mybatis不能将null设置为sql语句的参数值(Oracle)

今天遇到一个问题,数据库用的oracle,先简单描述一下,Mybatis不能将null值设置为待执行sql语句的参数,再详细描述一下发现问题的经过: 之前用Mybatis时,在xml文件中写SQL的时候,常会用到<if test="">这样的判断条件,如下: ...

2020-03-21 12:18:04 49 0

原创 SpringBoot项目启动过程源码终于整体捋了一遍(一)

写在前面:这几天撸这段源码过程中,发现好多东西之前都忽视了,所以决定连载几篇,把之前漏掉的、现在想起来了的,都整理总结下来。 Spring Boot项目启动过程这个问题过于经典,之前也是能说上来一点,但是说实话,源码都是一个片段一个片段的看过,没有系统性地连起来,这几天从头开始捋了一遍,也不是闲...

2020-03-17 19:10:36 155 0

原创 记一次VUE项目在nginx上的部署经历

由于最近的项目需要全栈,其实接触vue有一段时间了,但至今仍然感觉是个小白,所以想借这次在nginx上部署vue项目的机会,给前端相关的博客开个头,可以从平时的总结中积累。 首先当然是npm run build打包项目,生成static文件夹和index.html文件。 然后一顿百度nginx...

2020-03-10 21:09:49 106 0

原创 Redis 3.0版本前后,分片与集群的实现

首先这篇博客对Redis的集群部署工作不予介绍,因为最近的开发涉及到了使用jedis客户端操作Redis,借此机会总结梳理一下jedis客户端操作Redis的三种模式:单机模式(Jedis)、分片模式(ShardedJedis)和集群模式(JedisCluster)。 首先当然是把依赖引进来: ...

2020-01-08 22:02:05 123 0

原创 由传统IO演化至零拷贝的过程

零拷贝(Zero-Copy)用于在数据读写过程中减少不需要的CPU拷贝,CPU就那么几个,减少它的负担自然可以提高处理效率。数据传输有本地的文件拷贝和通过socket进行文件传输两种,两者区别不大,只是文件数据最终的去向仍然是本地磁盘还是网卡的区别,这里以socket文件为例介绍传统IO演化至零拷...

2019-12-13 15:01:21 138 0

原创 InnoDB与MyISAM该如何选择

题目算对本文的一个概括,但我不想一上来就对这两个MySQL引擎一顿比较。这篇博客的切入点,一切的一切都是因为别人问了我一句:MySQL的数据结构是什么? 听到这个问题,脑子里B+树、B树、Hash争着往外蹦,可是没蹦出去,因为忽然想到,这不是索引的数据结构吗?索引的数据结构和数据库的数据结构是一...

2019-11-29 19:33:57 53 0

原创 就想画个详细点的线程状态图

2019-11-26 11:18:23 86 0

原创 Spring Boot项目入口mainClass竟然不是ApplicationRun!

emmmm标题有点今日某条的,其实我想表达的意思是Spring Boot项目打成的jar包,程序的真正入口main方法并不是我们写的ApplicationRun启动类里的。当然,这看怎么理解了,如果非要说这是我自己写的main方法它就是入口这也没错,只不过你这main方法前面人家jar包还有一个自...

2019-11-21 11:49:36 287 0

原创 利用Optional类省去烦人的非空判断

上一篇梳理了一下利用流操作集合的一些方法,其中提到了Optional类。它也是JDK8的新特性之一,可以顺便总结下。 开发过程中为了避免程序跑出空指针异常,往往需要在代码中做大量的非空判断,Optional类最大的作用就是省去这些if-else非空判断,当然它和lombok的@NotNull不一...

2019-10-25 21:58:25 181 0

原创 集合的流操作和函数式编程总结以便用时查阅

集合的流操作和函数式编程都是JDK8的新特性,重语法,记住就行,记不住的就多用几遍,用习惯了开发效率会提高不少。 试试这些新特性前先做了数据初始化的准备工作,接下来的例子都是用这几个集合,如下: 准备好了那就一个一个来了。 1.match a即为集合中元素的变量,记住a ->...

2019-10-25 21:28:26 63 0

原创 单例模式真香

之前对单例模式的印象停留在了各种骚操作保证只有一个实例,一个就一个呗,天天CRUD也想不到有什么用的地方呀,除了准备面试前会写一写,好像还真没怎么写过单例模式。今天着实真香了一把,不过香在单例模式的另一个特性。 是这样的,项目客户端和服务器之间的通信框架是Netty,客户端与服务器绑定成功后可以...

2019-10-24 23:54:20 71 0

原创 Lombok该如何取舍

其实之前受同事影响接触过Lombok,当时对它的印象停留在了:怎么侵入性怎么强,那我什么代码都不用写了,就光打注解了呗,以后还怎么维护。但是看了人家一个个干净简洁的entity,着实真香,所以决定接触一下,并对其做一些取舍。 先接地气的介绍一下Lombok的原理,Lombok的所有注解的生命周期...

2019-10-11 16:04:28 448 0

原创 voliate关键字的应用误区

写下这篇博客也是因为本人之前对voliate关键字理解不透彻,才有了应用误区,希望同样没有理解到位的朋友可以一起踩坑,也欢迎上帝视角明明白白的大佬指出本文的不当之处。 先说一下自己之前对voliate的理解,voliate通过内存屏障可以禁止指令重排序和保证可见性,但是不能保证并发安全。禁止指令...

2019-09-30 12:24:36 367 0

原创 Mybatis的缓存机制和延迟加载

上一篇部分阅读了Mybatis的源码梳理了一下它作为ORM层解决方案是如何帮助我们访问数据库的,今天想再总结一下Mybatis的两个特性。 Mybatis缓存机制分为一级缓存和二级缓存。 一级缓存是sqlSession级的,即利用同一个sqlSession执行查询相同的SQL,数据会直接从缓存...

2019-06-03 08:16:24 162 0

原创 一次Mybatis部分源码阅读

Mybatis是ORM层的解决方案,其特性包括延迟加载,缓存等。既然是ORM层的解决方案,本质上当然是帮助我们更合理的去访问数据库,所以延迟加载和缓存打算以后再看,今天只阅读了部分源码,梳理一下Mybatis是如何帮助我们操作数据库的。 可以先梳理一下如果没有Mybatis,我们是怎么利用JDB...

2019-05-30 09:14:35 71 0

原创 Redis为什么设计成单线程的

其实这个问题可以延伸出两个问题: 1.Redis为什么单线程也能这么快? 2.Redis为什么不设计成多线程的? 一个一个回答: 一.为什么单线程也能这么快? 1.几乎是完全基于内存的数据读写,虽然也有数据持久化策略。 2.正是因为单线程,避免了线程之间的上下文切换的开销,也没有大量锁...

2019-05-29 07:29:00 312 0

转载 转载一篇精简的缓存击穿,穿透和雪崩的博客

作者:每天进步一点点yes 来源:CSDN 原文:https://blog.csdn.net/kongtiao5/article/details/82771694 版权声明:本文为博主原创文章,转载请附上博文链接! --------------------- 一、缓存处理流程 前台请求...

2019-05-24 10:59:05 104 0

原创 关于反射机制及其应用的一些梳理

反射机制是一个很重的开销,很多框架的搭建依赖反射机制,比如Spring的AOP,但是实际开发编码中一般不要用反射,一是因为开销太大,另一方面也污染代码,也是因为开发过程中接触不多,之前对于反射机制一直是概念模糊的,现在我把反射机制理解成了一句话:根据一个String操作特定的对象(可以是属性,方法...

2019-05-15 23:21:36 110 0

原创 Base64编码简单总结

有人说Base64编码是一种加密算法,其实本质上就是一个“二进制到文本”的编码方法,规则是将3个字节(24位)转为4个字符,这样就方便了二进制数据的传输,例如图片等。 编码过程中可能出现最后还剩下1个或者2个字节,不够24位,这种情况就会在后面补0,经常会在Base64编码后的字符串结尾处看到“...

2019-05-13 14:52:45 97 0

原创 DateFormat工具类存在并发问题

也是今天踩了一个坑才去了解到的。 并发问题主要是在format()和parse()两个方法中,因为这两个方法中会去调用calendar.setTime(),如果DateFormat对象被静态全局变量引用,calendar就一个,并发下的setTime当然会有问题。我们常用的SimpleDateF...

2019-04-11 21:24:40 131 0

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